Является ли flatMap эффективным способом добавления элементов в поток - PullRequest
0 голосов
/ 21 февраля 2019

Например, см. Следующую функцию, которая дублирует четные числа в потоке:

Stream<Integer> duplicateEvens(Stream<Integer> items) {
    return items.flatMap(i -> {
        if (i % 2 == 0) {
            return Stream.of(i, i);
        } else {
            return Stream.of(i);
        }
    }
}

Альтернативным подходом может быть использование построителя потока следующим образом:

Stream<Integer> duplicateEvens(Stream<Integer> items) {
Stream.Builder result = builder();
Stream<Integer> extra = items.peek(result.add(i))
.filter(i -> i%2 == 0);
return Stream.concat(result.build(), extra);
}
...