假设我有一个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来完成这项工作?
答案 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());