[解決済み] Java 8でインデックスを持つストリームを反復処理する簡潔な方法はありますか?
2022-03-22 21:26:48
質問
ストリームのインデックスにアクセスしながら、ストリームを反復処理する簡潔な方法はありますか?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
これは、そこで示された LINQ の例と比べると、かなり期待はずれだと思われます。
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
もっと簡潔な方法はないのでしょうか?
さらにZIPが移動したか、削除されたようです...。
解決方法は?
最もクリーンな方法は、インデックスの流れから始めることです。
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
.filter(i -> names[i].length() <= i)
.mapToObj(i -> names[i])
.collect(Collectors.toList());
この結果、リストには "Erik"のみが含まれます。
forループに慣れている人なら、より馴染みやすい方法として、mutableオブジェクトを使用してアドホックカウンターを維持することができます。
AtomicInteger
:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
.filter(n -> n.length() <= index.incrementAndGet())
.collect(Collectors.toList());
注意点 を並列ストリームで使用すると、アイテムが必ずしも "順番に処理されないため、破損する可能性があります。 .
関連
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Java 8 StreamをArrayに変換する方法は?
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] Java 8 JDK を使用して、Iterable を Stream に変換する
-
[解決済み] Java 8 の並列ストリームにおけるカスタムスレッドプール
-
[解決済み] javaストリームで整数のリストを合計する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
SpringBootApplication を型解決できない。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
Javaクラスローダーにソースコードから潜り込む
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] Java 8 forEach with index [重複]について