【问题标题】:Java stream: Collect Stream<int[]> to List<int[]>Java 流:将 Stream<int[]> 收集到 List<int[]>
【发布时间】:2020-07-02 06:56:53
【问题描述】:

我试图了解 Java 流。

Atm 我有这个不起作用的构造:

List<int[]> whiteLists = processes.stream()
              .map(Process::getEventList)
              .forEach(eventList -> eventList.stream()
                      .map(event -> event.getPropertie("whitelist"))
                      .map(propertie -> propertie.getIntArray())
                      .collect(Collectors.toList()));
}

层次结构是:

  • 进程
    • 事件
      • 财产

Process::getEventList 返回Event 对象列表

event.getPropertie("whitelist") 返回一个具有getIntArray() 方法的Property 对象

event.getPropertie() 给了我一个 int 数组。


如何将这些数组收集到数组列表中?

谢谢!


【问题讨论】:

  • 这个不清楚是什么问题?什么返回 event.getPropertie("whitelist") 和什么返回 propertie.getIntArray()
  • 你的问题不清楚。请给我们一个最小且可重现的例子。这也可能有帮助:stackoverflow.com/help/minimal-reproducible-example
  • Kayaman 给出了正确答案。不使用 FlatMap 是个问题。

标签: java java-8 functional-programming java-stream


【解决方案1】:

你不能使用forEach(),因为它需要Consumer,这意味着它会消耗流,但不能返回任何东西(所以没有什么可收集的)。

您需要flatMap 来流式传输内部eventList,如下所示

List<int[]> whiteLists = processes.stream()
                                  .flatMap(p -> p.getEventList().stream())
                                  .map(event -> event.getPropertie("whitelist"))
                                  .map(propertie -> propertie.getIntArray())
                                  .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 2019-08-14
    • 2014-01-10
    • 2021-07-22
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多