Например, см. Следующую функцию, которая дублирует четные числа в потоке:
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);
}