, если вы хотите выполнить некоторые вычисления для элементов с соответствующими индексами (в данном конкретном случае - суммированием), нет необходимости использовать 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()))....
Общее название для этого типа логики "zip";т.е. когда даны две входные последовательности, он создает выходную последовательность, в которой каждые два элемента из входных последовательностей в одной и той же позиции объединяются с использованием некоторой функции.
В стандартной библиотеке нет встроенного метода для этого, но вы можете найти некоторые общие реализации здесь .Например,
, используя метод 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
- ваш список целых чисел.