如何解决使用groupingBy的类属性的平面映射收集器
似乎没有平面映射收集器可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())));
解决方法
我上这堂课
class Assignment {
private Integer index;
private List<Quantity> quantities;
}
然后,我有该类对象的列表。
List<Assigment> assignments = new ArrayList<>();
有没有一种方法创建一个Map
包含from Assignment
和List<Quantity>
as值的索引?
到目前为止,这是我尝试过的。
assignments.stream().collect(groupingBy(Assignment::getIndex));
但这给我一个Map<Integer,List<Assignment>>
,我想要一个Map<Integer,List<Quantity>>
。
我已经尝试过使用forEach
方法-它可以工作-但我确定必须有一种方法可以在一个衬里中进行操作-
或者至少仅使用collect
和groupingBy
方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。