Hermann aço:
Estou tendo este método que leva um número de listas, que contêm linhas de livros. Eu estou penteando-os para um fluxo para, em seguida, iterar sobre eles para Split em todos os não-carta de \\P{L}
.
Existe uma maneira de evitar o loop for-each e processar esta dentro de um fluxo?
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;
}
Andronicus:
Tendo fluxo, você pode simplesmente " flatMap
" mais e retornar o resultado:
return combinedStream
.flatMap(str -> Arrays.stream(str.split("\\P{L}")))
.collect(Collectors.toList());
Para colocá-lo completamente:
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());
}