如何使用Java Streams获取对象的List of List

8 浏览
0 Comments

如何使用Java Streams获取对象的List of List

我无法理解这个问题。

问题:

我想使用Java流来编写这段代码:

List manufacturers = ... // 制造商对象列表
List> cars = new ArrayList<>();
for (Manufacturer man : manufacturers) {
   cars.add(man.getCars()); // 假设getCars()返回一个车辆列表。
}

我认为使用Java流应该像下面这样:

List> cars = manufacturers.stream()
   .flatMap(man -> man.getCars().stream())
   .collect(Collectors.toList());

错误:

但是我的IDE显示如下错误:no instance(s) of type variable(s) R exist so that List conforms to Stream

以及Java编译器显示如下错误:

java: incompatible types: cannot infer type-variable(s) R
    (argument mismatch; bad return type in lambda expression
      java.util.List cannot be converted to java.util.stream.Stream)

有解决方案吗?

谢谢!

0
0 Comments

问题的原因是使用了错误的操作符flatMap,它会将所有的列表合并成一个List<Car>。正确的操作应该是使用map操作符来获取期望的结果。以下是正确的代码示例:

List<List<Car>> result = manufacturers.stream()
    .map(Manufacturer::getCars)
    .collect(Collectors.toList());

0