我正在尝试使用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,没有类型的实例 人员名单
答案 0 :(得分:5)
如果
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()))
平面将外部Stream
的元素映射到Stream<Persons>
,可以将其收集到List<Persons>
。
顺便说一句,尚不清楚输入logs
与输出之间的关系,因为您忽略了映射中logs.stream()
流的元素。