这段代码会将mylist中的所有元素添加到mylist2。
如果找到逗号并分隔它们,我如何更改它以添加元素?
ArrayList<String> mylist = new ArrayList<String>();
mylist.add("test");
mylist.add("test2, test3");
ArrayList<String> mylist2 = new ArrayList<String>();
mylist.stream()
.forEach(s -> mylist2.add(s));
mylist2.stream().forEach(System.out::println);
因此,电流输出为:
test
test2, test3
我需要第二个数组列表来包含然后打印:
test
test2
test3
我知道在Java 8中有过滤器。我可以做类似的事情吗
.filter(p -> p.contains(",")...
然后有什么东西可以拆分它?
你可以做一个flatMap
,包括一个Pattern::splitAsStream
Pattern splitAtComma = Pattern.compile("\s*,\s*");
List<String> myList2 = mylist.stream().flatMap(splitAtComma::splitAsStream)
.collect(Collectors.toList());
您可以split
每个字符串并flatMap
生成的数组:
mylist.stream()
.flatMap(x -> Arrays.stream(x.split(", ")))
.forEach(System.out::println);
您可以使用:
mylist.forEach(str -> mylist2.addAll(Arrays.asList(str.split("\s*,\s*"))));
输出
test
test2
test3
我需要
第二个数组列表来包含然后打印:
您可以创建两个流:一个用于创建目标列表,另一个用于显示它。
List<String> list2 = mylist.stream()
.flatMap(x -> Arrays.stream(x.split(", ")))
.collect(Collectors.toList());
list2.stream().forEach(System.out::println);
或者使用peak()
在收集到List
之前输出流的元素
List<String> list2 = mylist.stream()
.flatMap(x -> Arrays.stream(x.split(", ")))
.peek(System.out::println)
.collect(Collectors.toList());