我试图使用Java 8 stream()实现一种逻辑。
List<Persons> persons = logs.stream().map(l -> {
return rules.stream().map(rule -> generator.apply(rule)).collect(Collectors.toList());
}).collect(Collectors.toList());
但我得到:
不兼容的类型:必填列表,但集合被推断为R,没有任何类型的列表的实例
如果
l -> {return rules.stream().map(rule -> generator.apply(rule)).collect(Collectors.toList());}
产生一个List<Person>
,外部Stream
管道会产生一个List<List<Person>>
。
如果需要,flatMap
则需要List<Person>
:
List<Persons> persons =
logs.stream()
.flatMap(l -> rules.stream().flatMap(rule -> generator.apply(rule).stream()))
.collect(Collectors.toList());
说明:
rules.stream().flatMap(rule -> generator.apply(rule).stream())
创建一个Stream<String>
并将其平面映射到Stream<Persons>
。
.flatMap(l -> rules.stream().flatMap(rule -> generator.apply(rule).stream()))
flat将外部的元素映射Stream
到a Stream<Persons>
,可以收集到a List<Persons>
。
顺便说一句,尚不清楚输入logs
与输出之间的关系,因为您忽略了logs.stream()
映射中Stream的元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句