如果流包含多个逗号分隔值,则拆分该流

Way*_*eio 5 java lambda filter java-8 java-stream

此代码会将 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);
Run Code Online (Sandbox Code Playgroud)

因此,当前输出为:

test
test2, test3
Run Code Online (Sandbox Code Playgroud)

我需要第二个数组列表来包含然后打印:

test
test2
test3
Run Code Online (Sandbox Code Playgroud)

我知道 Java 8 中有过滤器。我可以做类似的事情吗

.filter(p -> p.contains(",")... 那么要分什么东西呢?

Flo*_*own 5

你可以做一个flatMap包括Pattern::splitAsStream喜欢

Pattern splitAtComma = Pattern.compile("\\s*,\\s*");
List<String> myList2 = mylist.stream().flatMap(splitAtComma::splitAsStream)
                         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


Mur*_*nik 4

您可以split每个字符串和flatMap结果数组:

mylist.stream()
      .flatMap(x -> Arrays.stream(x.split(", ")))
      .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)