将元素列为逗号分隔字符串 - 使用java 8流拆分并添加到列表中

时间:2018-02-15 12:26:38

标签: java java-8 java-stream

假设我有一个List<String>,其中一个元素可以有一个逗号分隔的String。

List<String> list = new ArrayList<>();
list.add("1");
list.add("2,3,4,5");
list.add("6,7");
list.add("8");

我想遍历列表并使用Java 8 Streams将逗号分隔的内容拆分为新元素。意味着每个数字都应该是列表中的元素。

我尝试使用.map().collect()

list.stream().map(l -> l.split(",")).collect(Collectors.toList());

但是split会返回String[],这不是我需要的。

有没有办法通过使用Java 8 Streams来完成这项工作?

2 个答案:

答案 0 :(得分:4)

list
    .stream()
    .flatMap(s -> Arrays.stream(s.split(","))
    .collect(Collectors.toList());

我们基本上使用flatMap(),其效果是对流的元素应用一对多转换,然后将生成的元素展平为新流。

答案 1 :(得分:0)

在@Tom已经提供的工作答案旁边,我提出以下建议,它使用java.util.regex.Pattern中新引入的splitAsStream(String)类及其方法Java 8

Pattern pattern = Pattern.compile(",");
List<String> split = list
    .stream()
    .flatMap(pattern::splitAsStream)
    .collect(Collectors.toList());