Właśnie odkryłem nowe możliwości strumienia Java 8. Pochodząc z Pythona, zastanawiałem się, czy istnieje teraz dobry sposób na wykonywanie operacji na tablicach, takich jak sumowanie, mnożenie dwóch tablic w sposób „pythonowy” w jednej linii?
Dzięki
java
arrays
java-8
java-stream
BlackLabrador
źródło
źródło
int[] result=IntStream.range(0, a.length).map( i->a[i]* b[i]).toArray();
mapToInt
aby uniknąć boksu.Możesz zmienić tablicę w strumień, używając
Arrays.stream()
:Po otrzymaniu strumienia możesz użyć dowolnej z metod opisanych w dokumentacji , takich jak
sum()
cokolwiek. Możnamap
albofilter
jak w Pythonie poprzez wywołanie odpowiednich metod strumieniowych z funkcji Lambda:Po zakończeniu modyfikowania strumienia wywołujesz go,
toArray()
aby przekonwertować go z powrotem na tablicę i użyć w innym miejscu:źródło
Uważaj, jeśli masz do czynienia z dużymi liczbami.
Powyższa suma nie jest
2 * Integer.MIN_VALUE
. W tym przypadku musisz to zrobić.źródło
Należy pamiętać, że Arrays.stream (arr) tworzy LongStream (lub IntStream, ...) zamiast Stream, więc nie można użyć funkcji mapy do modyfikacji typu. Właśnie dlatego dostępne są funkcje .mapToLong, mapToObject, ...
Zobacz dlaczego-cant-i-map-integers-to-strings-when-streaming-from-an-array
źródło