发现官方竟然没有,那就自己写一个
public static <T, U, A, R>
Collector<T, ?, R> flatMapping(Function<? super T, Stream<? extends U>> mapper,
Collector<? super U, A, R> downstream) {
BiConsumer<A, ? super U> downstreamAccumulator = downstream.accumulator();
return new Collectors.CollectorImpl<>(downstream.supplier(),
(r, t) -> Opp.ofNullable(t).map(mapper).ifPresent(s -> s.sequential()
.forEach(v -> downstreamAccumulator.accept(r, v))),
downstream.combiner(), downstream.finisher(),
downstream.characteristics());
}用法:
List<Integer> actual = Stream.iterate(0, i -> ++i).limit(3)
.collect(Collectors.flatMapping(i -> Stream.of(i, i), Collectors.toList()));
Assertions.assertEquals(Arrays.asList(0, 0, 1, 1, 2, 2), actual);