【问题标题】:How to stream the contents after Stream.Concat to avoid intermediate List [closed]如何在 Stream.Concat 之后流式传输内容以避免中间列表 [关闭]
【发布时间】:2020-07-27 14:23:44
【问题描述】:

我有两个列表 A 和 B。我想将它们合并并再次流以形成一个数组。

我目前正在做:

List<String> aggregate  = Stream.concat(A.stream(), B.stream()).collect(Collectors.toList());
String[] final = aggregate.stream().limit(10).collect(Collectors.toList()).toArray(new String[10]);

在这里,我有两个中间列表,我只是用来获取最终数组。有没有办法可以消除这两个 collect(Collectors.toList()) 并将其写在一行中?

谢谢

【问题讨论】:

标签: java arrays java-8 java-stream


【解决方案1】:

你完全不需要收集你可以直接使用.toArray()

String[] res = Stream.concat(A.stream(), B.stream()).limit(10).toArray(String[]::new);

如果你想连接流,然后单独获取数组而不收集

Stream<String> aggregate  = Stream.concat(A.stream(), B.stream());
String[] res = aggregate.limit(10).toArray(String[]::new);

【讨论】:

    【解决方案2】:

    这样使用

    Stream.concat(A.stream(), B.stream()).collect(Collectors.toList());
    

    这将返回一个列表。如果你想成为一个数组,那就做

     Stream.concat(A.stream(), B.stream()).toArray(String[]::new);
    

    对于多个流,我们可以这样做

    Stream.concat(firstStream, concat(secondStream, concat(thirdStream, fourthStream))).toArray(String[]::new);
    

    希望对你有帮助

    【讨论】:

    • 这与作者已有的有什么不同?
    • 拼接后无需采集,只需应用操作采集即可。
    • 问题是求数组。
    • @hev1 修改了答案。谢谢
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2021-12-31
    • 2013-12-31
    相关资源
    最近更新 更多