使用groupingBy的类的属性的平面映射收集器

我有这门课。

class Assignment { private Integer index; private List quantities; } 

然后,我有一个来自该类的对象列表。

 List assignments = new ArrayList(); 

有没有办法创建一个包含Assignment索引和List作为值的Map

这是我到目前为止所尝试的。

 assignments.stream().collect(groupingBy(Assignment::getIndex)); 

但这给了我一个Map<Integer, List> ,我想要一个Map<Integer, List>

我已经尝试过使用forEach方法 – 并且它有效 – 但我确信必须有一种方法可以在一个衬里中进行 – 或者至少只使用collectgroupingBy方法

看起来没有平面映射收集器可以用作Java8中groupingBy的下游,但它已被Java9提出并被接受: https ://bugs.openjdk.java.net/browse/JDK- 8071600

 public static  Collector flatMapping(Function> mapper, Collector downstream) { BiConsumer 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 ,您可以使用以下代码:

 Map> result = assignments.stream() .collect(groupingBy(Assignment::getIndex, flatMapping(Assignment::quantities, toList())));