流 flatMap 与地图

Kri*_*sag -2 java collections stream java-8

要过滤List我们可以使用

a1.stream().filter(x->x>6).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

并过滤我使用的两个列表 FlatMap

Stream<List<Integer>> s2=Stream.of(a1,a2);
s2.flatMap(x->x.stream()).sorted().filter(x->x>6).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但我尝试以这种方式过滤单个 List

Stream<List<Integer>> s1=Stream.of(a1);
s1.map(x->x.stream()).filter(x->x>2).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

我有一个错误--- The operator > is undefined for the argument type(s) Stream<Integer>, int

但是当我在地图中使用 flatMap 时没有错误为什么

Stream<List<Integer>> s1=Stream.of(a1); 
s1.flatMap(x->x.stream()).filter(x->x>2).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

如果您正在调用map(x->x.stream())a Stream<List<Integer>>,您将得到一个Stream<Stream<Integer>>。您不能应用.filter(x->x>2)that 的元素Stream,因为这些元素是Stream<Integer>s,并且>运算符需要两个数字操作数。

如果使用flatMap而不是,则将您map转换Stream<List<Integer>>为 a,Stream<Integer>其元素是List原始 s 的所有元素Stream。因此,您可以.filter(x->x>2)对它们应用过滤器。