Я только что открыл новые возможности потока Java 8. Исходя из Python, мне было интересно, есть ли теперь удобный способ выполнять операции над массивами, такие как суммирование, умножение двух массивов "питонным" способом?
Спасибо
java
arrays
java-8
java-stream
BlackLabrador
источник
источник
int[] result=IntStream.range(0, a.length).map( i->a[i]* b[i]).toArray();
mapToInt
чтобы избежать бокса.Вы можете превратить массив в поток, используя
Arrays.stream()
:После того, как вы получили свой поток, вы можете использовать любой из методов, описанных в документации , например,
sum()
или как угодно. Вы можетеmap
илиfilter
как в Python, вызывая соответствующие методы потока с помощью функции Lambda:Как только вы закончите модифицировать ваш поток, вы вызываете,
toArray()
чтобы преобразовать его обратно в массив для использования в другом месте:источник
Будьте осторожны, если вам приходится иметь дело с большими числами.
Сумма выше не является
2 * Integer.MIN_VALUE
. Вы должны сделать это в этом случае.источник
Обратите внимание, что Arrays.stream (arr) создает LongStream (или IntStream, ...) вместо Stream, поэтому функцию map нельзя использовать для изменения типа. Вот почему .mapToLong, mapToObject, ... функции предоставляются.
Взгляните на почему-can-i-map-integer-to-strings-to-strings-when-streaming-from-an-array
источник