当前位置:  开发笔记 > 编程语言 > 正文

使用groupingBy的类的属性的Flat-Mapping Collector

如何解决《使用groupingBy的类的属性的Flat-MappingCollector》经验,为你挑选了1个好方法。

我有这门课.

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

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

List assignments = new ArrayList<>();

有没有办法创建一个Map包含索引AssignmentListas值的方法?

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

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

但这给了我一个Map>,我想要一个Map>.

我已经尝试过使用forEach方法 - 它可以工作 - 但我确信必须有一种方法可以在一个衬里中完成它 - 或者至少只使用collectgroupingBy方法



1> Jorn Vernee..:

看起来没有平面映射收集器可以用作groupingByJava8的下游,但它已被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));
    } 

如果你使用那个,并且还添加一个返回a 的quantities方法,你可以使用这个代码:AssignmentStream

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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有