Acabei de descobrir os novos recursos de fluxo do Java 8. Vindo de Python, eu queria saber se havia agora uma maneira elegante de fazer operações em matrizes como soma, multiplicando duas matrizes de uma maneira "uma linha pitônica"?
obrigado
java
arrays
java-8
java-stream
BlackLabrador
fonte
fonte
int[] result=IntStream.range(0, a.length).map( i->a[i]* b[i]).toArray();
mapToInt
para evitar o boxe.Você pode transformar uma matriz em um fluxo usando
Arrays.stream()
:Depois de obter seu fluxo, você pode usar qualquer um dos métodos descritos na documentação , como
sum()
ou o que quer. Você pode gostarmap
oufilter
gostar do Python chamando os métodos de fluxo relevantes com uma função Lambda:Depois de modificar o seu fluxo, chame-o
toArray()
para convertê-lo novamente em uma matriz para usar em outro lugar:fonte
Tenha cuidado se você tiver que lidar com grandes números.
A soma acima não é
2 * Integer.MIN_VALUE
. Você precisa fazer isso neste caso.fonte
Observe que Arrays.stream (arr) cria um LongStream (ou IntStream, ...) em vez de Stream, para que a função de mapa não possa ser usada para modificar o tipo. É por isso que as funções .mapToLong, mapToObject, ... são fornecidas.
Veja por que não consigo mapear números inteiros para seqüências de caracteres ao transmitir a partir de um array
fonte