如何使用流从两个列表或数组乘法中查找元素对

我有两个数字列表,我想找到所有可能的数字对。例如,给定列表和结果应为:[1, 2, 3][3, 4]

[(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]

我知道我可以使用for循环来做到这一点,但是有没有更简洁的方法可以使用Java 8流来做到这一点?

我尝试了以下内容,但是我错过了一些东西,因为我得到了而不是.List<Stream<int[]>>List<int[]>

public static void main(String[] args) {
    List<Integer> list1 = Arrays.asList(1, 2, 3);
    List<Integer> list2 = Arrays.asList(3, 4);
    List<int[]> pairs = list1.stream()
                             .map(i -> list2.stream()
                                            .map(j -> new int[]{i, j}))
                             .collect(Collectors.toList());
    pairs.forEach(i -> {
        System.out.println("{" + i[0] + "," + i[1] + "}");
    });
}

答案 1

使用flatMap()方法而不是map(),它将流合并为一个。参考:map() 和 flatMap() 之间的区别以及 flatMap() 示例


答案 2

你只需要用flatMap()替换你的第一个。map()