解决,不兼容类型错误,Java 8

时间:2019-12-25 07:48:10

标签: java-8 java-stream

我正在尝试使用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,没有类型的实例      人员名单

1 个答案:

答案 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()流的元素。