// Map Filter Parallel Gatherer static Gatherer mapFilter( Function mapper, Predicate filter) { return Gatherer.of( (_, element, downstream) -> { R mappedElement = mapper.apply(element); if (filter.test(mappedElement)) { return downstream.push(mappedElement); } return true; } ); } var stream = Stream.of("one", "two", "three", "four", "five"); var result = stream.parallel() .gather(mapFilter(String::length, length -> length > 3)) .toList(); System.out.println("result = " + result);