因为不是以这种方式工作的,所以它一次只筛选一个集合。对于你的任务,你需要像Python这样的东西;这可以使用 来实现。在Scala中,这看起来很短:filter
itertools.product
flatMap
prices.flatMap(p1 =>
prices.flatMap(p2 =>
if (p1 + p2 == 5) List((p1, p2)) else List()))
如果你想在(原生)Java中做到这一点,就会出现这样的事情:
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Integer> prices = Arrays.asList(1,2,3,4,5,6,7,8,9);
List<List<Integer>> result = prices.stream().flatMap(p1 ->
prices.stream().flatMap(p2 ->
p1 + p2 == 5 ? Stream.of(Arrays.asList(p1, p2)) : Stream.empty()
)
).collect(Collectors.toList());
System.out.println(result);
}
}
...它打印 .但我不会在现实中使用它;)至少,元组类会很好。[[1, 4], [2, 3], [3, 2], [4, 1]]
值得注意的是,最强大的功能之一是;几乎所有的流变换(过滤器,映射,笛卡尔积,扁平化)都可以使用它来实现。休息(如拉链)几乎总是折叠/减少(或者,很少,展开)。flatMap