Her*_*ahl 3 java regex string java-8 java-stream
我有这种方法,它需要许多列表,其中包含几行书。我将它们组合到一个流中,然后遍历它们以拆分所有非字母的\\P{L}
。
有没有办法避免for-each循环并在流中处理它?
private List<String> getWordList(List<String>... lists) {
List<String> wordList = new ArrayList<>();
Stream<String> combinedStream = Stream.of(lists)
.flatMap(Collection::stream);
List<String> combinedLists = combinedStream.collect(Collectors.toList());
for (String line: combinedLists) {
wordList.addAll(Arrays.asList(line.split("\\P{L}")));
}
return wordList;
}
Run Code Online (Sandbox Code Playgroud)
有了流,您可以flatMap
进一步简单地“ ”并返回结果:
return combinedStream
.flatMap(str -> Arrays.stream(str.split("\\P{L}")))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
综上所述:
private List<String> getWordList(List<String>... lists) {
return Stream.of(lists)
.flatMap(Collection::stream)
.flatMap(str -> Arrays.stream(str.split("\\P{L}")))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)