Java流将数组收集到一个列表中

Nat*_*enn 5 java java-8 java-stream

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

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

然而,List<String[]>()这会产生一个,当然不会编译.如何将最终流简化为一个列表?

Tag*_*eev 10

用途flatMap:

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

您还可以使用Pattern.splitAsStream以下方法删除中间数组

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