【问题标题】:Java stream collect arrays into one listJava流将数组收集到一个列表中
【发布时间】:2015-11-12 03:31:30
【问题描述】:

我正在尝试使用新的流功能将字符串列表扩展为更长的列表。

segments = segments.stream() //segments is a List<String>
    .map(x -> x.split("-"))
    .collect(Collectors.toList());

然而,这会产生一个List&lt;String[]&gt;(),当然不会编译。如何将最终流缩减为一个列表?

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    使用flatMap:

    segments = segments.stream() //segments is a List<String>
        .map(x -> x.split("-"))
        .flatMap(Arrays::stream)
        .collect(Collectors.toList());
    

    您还可以使用Pattern.splitAsStream 删除中间数组:

    segments = segments.stream() //segments is a List<String>
        .flatMap(Pattern.compile("-")::splitAsStream)
        .collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      你需要使用flatMap:

      segments = segments.stream() //segments is a List<String>
          .map(x -> x.split("-"))
          .flatMap(Stream::of)
          .collect(Collectors.toList());
      

      注意Stream.of(T... values) 只是调用Arrays.stream(T[] array),所以这段代码等价于@TagirValeev 的第一个解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-20
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        相关资源
        最近更新 更多