Usando correntes em vez de nested loops

puhlerblet:

Atualmente estou aprendendo java 8 fluxos. Eu tenho uma lista de números inteiros, com valores de 1 a 1000. Agora, eu quero criar uma nova lista de números inteiros, onde cada elemento é o resultado da multiplicação de cada elemento do número lista com o outro elemento do número lista.

O código a seguir faz o trabalho:

        List<Integer> numbers = IntStream
                .range(1,999)
                .mapToObj(Integer::valueOf)
                .collect(Collectors.toList());

        List<Integer> products = new ArrayList<>();
        for (Integer i : numbers) {
            for (Integer j : numbers) {
                products.add(i*j);
            }
        }

Eu gostaria de saber se há uma maneira de evitar o laço for aninhado usando streams?

Andrew Tobilko:
List<Integer> products = numbers.stream()
        .flatMap(i -> numbers.stream().map(j -> i * j))
        .collect(Collectors.toList());

i -> numbers.stream().map(j -> i * j)é um Functionpara obter um Streamdos produtos de um determinado i. Usá-lo para gerar uma Stream<Integer>para cada elemento numbers, flatMapque s *** , e recolher o resultado em um List.

Eu não diria que parece / desempenho melhor do que a versão simples que você venha com.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=312810&siteId=1
Recomendado
Clasificación