此代码会将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
我需要第二个arraylist来包含然后打印:
test
test2
test3
我知道在Java 8中有过滤器。我可以做点什么吗
.filter(p -> p.contains(",")...
那会分裂一下吗?
答案 0 :(得分:4)
您可以执行flatMap
,其中包括Pattern::splitAsStream
Pattern splitAtComma = Pattern.compile("\\s*,\\s*");
List<String> myList2 = mylist.stream().flatMap(splitAtComma::splitAsStream)
.collect(Collectors.toList());
答案 1 :(得分:3)
你可以split
每个字符串和flatMap
生成的数组:
mylist.stream()
.flatMap(x -> Arrays.stream(x.split(", ")))
.forEach(System.out::println);
答案 2 :(得分:1)
您可以使用:
mylist.forEach(str -> mylist2.addAll(Arrays.asList(str.split("\\s*,\\s*"))));
<强>输出强>
test
test2
test3
答案 3 :(得分:1)
我需要第二个arraylist来包含然后打印:
您可以创建两个流:一个用于创建目标List,另一个用于显示它。
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());