【发布时间】:2017-07-02 09:10:48
【问题描述】:
我有两个数字列表,我想找到所有可能的数字对。例如,给定列表[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()
-
您可能想了解有关笛卡尔积的信息。但在这种情况下,我建议使用两个 for 循环,因为它比任何 java 8 流魔术都更具可读性。
标签: java list java-8 java-stream cartesian-product