私はArrayList<Integer>
の要素が均等にあります。一度に2つの値を解析するためにStream.forEach
を使用するにはどうすればよいですか?複数値のストリームforeach?
x.forEach((a, b) -> System.out.println(a.toString() + "-" + b.toString());
これは機能しません。
私はArrayList<Integer>
の要素が均等にあります。一度に2つの値を解析するためにStream.forEach
を使用するにはどうすればよいですか?複数値のストリームforeach?
x.forEach((a, b) -> System.out.println(a.toString() + "-" + b.toString());
これは機能しません。
これは、トリックを行います:
IntStream.range(0, list.size() - 1)
.filter(i -> i % 2 == 0)
.forEach(i -> System.out.println(list.get(i) + "-" + list.get(i + 1)));
それはリスト[1、2、3、4、5、6]から次の出力が生成されます:あなたが追加することが
1-2
3-4
5-6
あなたのプロジェクトのいくつかのユーティリティクラスに次のヘルパーメソッド:
public static <T> void forPairs(List<T> list, BiConsumer<T, T> action) {
IntStream.range(0, list.size()/2)
.forEach(i -> action.accept(list.get(i*2), list.get(i*2+1)));
}
そして、このようにそれを使用します。
List<Integer> list = Arrays.asList(1, 3, 5, 2, 1, 6);
forPairs(list, (a, b) -> System.out.println(a + "-" + b));
あなたはストリームを使用するためのストリームを使用したい場合は、次のことができます。
ここで問題となるのは、ストリームは副作用のないステートレスなパイプライン操作用に設計されており、要素を組み合わせるためではありません(いくつかの例外を除いて)。 docsは非常に精巧です。
ここiteratorを使用すると、はるかに適切である:
Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5, 6).iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next().toString() + "-" + iterator.next().toString());
}
注:リストが奇数サイズであるならば、これはNoSuchElementException
をスローします。必要に応じて防御チェックが簡単に書かれます。
値... – Maroun
1,2,3,4,5,6などの整数値 – QuaziModo
[ストリームから連続するペアを収集する]を見ましたか?(http://stackoverflow.com/questions/) 20470010/collect-continuous-pairs-a-stream?rq = 1)? –