使用流而不是嵌套的for循环

puh*_*let 3 java nested-loops java-8 java-stream

我目前正在学习Java 8流。我有一个整数的列表,从1到1000的值现在,我想创建整数,其中每个元素是的每个元素相乘的结果的新列表编号列表与对方元素号码列表。

以下代码可以完成这项工作:

        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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以通过使用流来避免嵌套的for循环?

And*_*lko 9

List<Integer> products = numbers.stream()
        .flatMap(i -> numbers.stream().map(j -> i * j))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

i -> numbers.stream().map(j -> i * j)Function获取Stream特定产品的途径i。用它来生成Stream<Integer>对每一个元素numbersflatMap是s ***,并收集结果成List

我不会说它的外观/性能要比您提出的普通版本更好。