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

标签 java list java-8 java-stream cartesian-product

我有两个数字列表,我想找到所有可能的数字对。例如,给定列表 [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] + "}");
    });
}

最佳答案

使用flatMap() 方法代替ma​​p(),它将流合并为一个。 引用:Difference Between map() and flatMap()flatMap() example

关于java - 如何使用流从两个列表或数组乘法中查找元素对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220047/

相关文章:

javascript - 将网站表单连接到(编译的)java/common lisp 程序(网站作为 UI)

java - 创建集合或从列表中删除哪个更快?

Javas 流 findFirst() 的 Scala 等价物

java - 为什么将 1582 年之前的 Java 日期转换为带有 Instant 的 LocalDate 会给出不同的日期?

REST服务中的Java 8 Lambda表达式不起作用

java - 在 JBoss 7.2 中查找 SessionContext

java - 向多个客户端广播消息时如何排除或跳过发送者(多线程java套接字)

java - 在java中的字符串中查找 "\"的最后一个索引

java - 想要列表中的非重复元素

arrays - Perl:匿名列表的长度