ストリーム内のインデックスにアクセスしながら、ストリームを反復する簡潔な方法はありますか?
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が移動または削除されたようです...
IntStream.rangeClosed(x, y)
。
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
と呼ばれる実験的な2値ストリームとともに削除されました。主な問題は、これを効果的に行うには、Javaが構造的に型付けされたペア(またはタプル)の型を実際に必要とすることです。欠けているのは、汎用のPairクラスまたはTupleクラスを作成するのが簡単なことです。これは何度も行われていますが、すべて同じタイプに消去されます。BiStream
MapStream
intRange()
?これまで、Java 8でこのメソッドに遭遇したことはありません。