【问题标题】:How to get List of List of Objects with Java Streams [duplicate]如何使用 Java 流获取对象列表列表 [重复]
【发布时间】:2020-07-10 22:43:19
【问题描述】:

我无法解决这个问题。

问题

我想用 Java 流来处理这个:

List<Manufacturer> manufacturers = ... // List of Manufacturer-Objects

List<List<Car>> cars = new ArrayList<>();
for (Manufacturer man : manufacturers) {
   cars.add(man.getCars()); // Let's just say getCars() returns a List of cars.
}

我认为 Java Streams 应该如下所示:

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

错误

但我的 IDE 显示以下内容 no instance(s) of type variable(s) R exist so that List&lt;Event&gt; conforms to Stream&lt;? extends R&gt;

还有java编译器:

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

对此有任何解决方案吗? 谢谢!

【问题讨论】:

  • List&lt;List&lt;Car&gt;&gt; cars = manufacturers.stream() .map(man -&gt; man.getCars()) .collect(Collectors.toList());
  • 哦,是的,我忘记了第二个“流”,但这仍然返回相同的错误。我将编辑问题。
  • List&lt;List&lt;Car&gt;&gt; result = manufacturers.stream() .map(Manufacturer::getCars) .collect(Collectors.toList());
  • @RavindraRanwala 这是正确的答案。我只需单击一下即可将其标记为已批准的答案:)
  • 哦,我删除了,因为这是一个微不足道的答案。让我收回它

标签: java java-8 java-stream


【解决方案1】:

这里的问题是您使用的是flatMap 运算符,它获取所有列表并为您提供List&lt;Car&gt;。相反,您必须使用 map 运算符来获得所需的结果。这是它的外观。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 2017-09-29
    • 2019-06-18
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多