我有这门课.
class Assignment { private Integer index; private Listquantities; }
然后,我有一个来自该类的对象列表.
Listassignments = new ArrayList<>();
有没有办法创建一个Map
包含索引Assignment
和List
as值的方法?
这是我到目前为止所尝试的.
assignments.stream().collect(groupingBy(Assignment::getIndex));
但这给了我一个Map
,我想要一个Map
.
我已经尝试过使用forEach
方法 - 它可以工作 - 但我确信必须有一种方法可以在一个衬里中完成它 - 或者至少只使用collect
和groupingBy
方法
看起来没有平面映射收集器可以用作groupingBy
Java8的下游,但它已被Java9提出并被接受:https://bugs.openjdk.java.net/browse/JDK-8071600
public staticCollector flatMapping(Function super T, ? extends Stream extends U>> mapper, Collector super U, A, R> 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)); }
如果你使用那个,并且还添加一个返回a 的quantities
方法,你可以使用这个代码:Assignment
Stream
Map> result = assignments.stream() .collect(groupingBy(Assignment::getIndex, flatMapping(Assignment::quantities, toList())));