使用 Stream API 的两个集合的叉积

Cross product of two collections using the Stream API

我有两个列表:

List<Integer> list1 = ...
List<Integer> list2 = ...

我有以下 class:

class Pair {
    public Pair(final Integer i1, final Integer i2) {
        ...
    }
}

是否可以使用 Java8 流将两个输入列表组合成一个 List<Pair>?这可以通过双 for 循环轻松完成,但我想知道 Java8 流是否可行。

list1.stream()
     .flatMap(i1 -> list2.stream()
                         .map(i2 -> new Pair(i1, i2)))
     .collect(Collectors.toList());