ハンズ:
前の質問では、私は以前に尋ねたどのFunctionalInterfaceは、私が使用する必要がありますか?
今、私はに追加しようとしていたList<Integer>
だけでなく、2つの整数a
とb
各インデックスは、別のリストの同じインデックスに追加されますように、。
私が以前持っていました
BinaryOperator<Integer> binaryOperator = Integer::sum;
使用して2つの整数を追加するためbinaryOperator.apply(int a,int b)
。同様の方法などがあります
BinaryOperator<List<Integer>> binaryOperator = List<Integer>::sum;
その後、中に結果を得ますかList<Integer> cList
?
Ousmane D .:
あなたが(この特定のケース合計で)対応するインデックスにある要素の上にいくつかの計算を実行したい場合に使用する必要はありませんBinaryOperator
、代わりに使用してIntStream.range
インデックスを生成します:
// generates numbers from 0 until list.size exclusive
IntStream.range(0, list.size())....
// generates numbers from 0 until the minimum of the two lists exclusive if needed
IntStream.range(0, Math.min(list.size(), list2.size()))....
このタイプのロジックのための共通の名前は「郵便番号」です。二つの入力シーケンスが与えられたとき、すなわち、それは、同じ位置の入力シーケンスからの各2つの要素がいくつかの機能を使用して合成された出力シーケンスを生成します。
そこには組み込みの方法そのための標準ライブラリにはいませんが、あなたは、いくつかの一般的な実装を見つけることができるここに。
例えば、使用してzip
リンクポストの受け入れ答えに方法を、あなたは、単に行うことができます:
List<Integer> result = zip(f.stream(), s.stream(), (l, r) -> l + r).collect(toList());
またはメソッド参照を使用して:
List<Integer> result = zip(f.stream(), s.stream(), Math::addExact).collect(toList());
どこf
とs
整数のリストです。