【问题标题】:Can I transform a Stream<List<X>> to a Stream<X>? [duplicate]我可以将 Stream<List<X>> 转换为 Stream<X> 吗? [复制]
【发布时间】:2015-11-05 10:42:57
【问题描述】:

这可能吗(伪Java):

someList = [
  [1,2],
  [3,4]
];
Stream<List<X>> a = someList.stream();
Stream<X> b = a.whatever(...);
assert b.collect(list).equals([1,2,3,4]);

更笼统地说,是否存在对流的操作可以增加流中元素的数量(而不是像filter 那样减少)?

【问题讨论】:

    标签: java-8 java-stream


    【解决方案1】:

    是的。 flatMap 就是这么做的。

    Stream<X> b = someList.stream().flatMap(l -> l.stream());
    

    假设someListList&lt;List&lt;X&gt;&gt;flatMap 会将内部列表的所有元素扁平化为单个 Stream。

    【讨论】:

    • 您可以使用方法参考.flatMap(List::stream)
    • 如此简单。然而我没有找到它,因为我不知道 flatten 在这里是正确的术语。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2021-09-18
    • 2022-11-28
    相关资源
    最近更新 更多