似乎没有平面映射收集器可
groupingBy在Java8中用作下游,但已被Java9提出并接受:https
://bugs.openjdk.java.net/browse/JDK-8071600
public static <T, U, A, R> Collector<T, ?, R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream) { BiConsumer<A, ? super U> downstreamAccumulator = downstream.accumulator(); return Collector.of(downstream.supplier(), (r, t) -> mapper.apply(t).sequential().forEach(u -> downstreamAccumulator.accept(r, u)), downstream.combiner(), downstream.finisher(), downstream.characteristics().stream().toArray(Collector.Characteristics[]::new)); }如果使用该代码,并且还添加了一个返回的
quantities方法,则可以使用以下代码:
Assignment``Stream<Quantity>
Map<Integer, List<Quantity>> result = assignments.stream() .collect(groupingBy(Assignment::getIndex, flatMapping(Assignment::quantities, toList())));



