首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8 groupingBy列表

java 8 groupingBy列表
EN

Stack Overflow用户
提问于 2017-07-19 13:54:24
回答 1查看 2.4K关注 0票数 5

假设我们有一个对象绘图:

代码语言:javascript
复制
class Draw {

private int num1, num2, num3;

public Draw (int num1, int num2, int num3) {
    this.num1 = num1;
    this.num2 = num2;
    this.num3 = num3;
}

public int getNum1() {
    return num1;
}

public void setNum1(int num1) {
    this.num1 = num1;
}

public int getNum2() {
    return num2;
}

public void setNum2(int num2) {
    this.num2 = num2;
}

public int getNum3() {
    return num3;
}

public void setNum3(int num3) {
    this.num3 = num3;
}

public List<Integer> getResultAsList() {
    return Arrays.asList(num1, num2, num3);
}

}

现在,有了抽签列表,我需要得到一个Map,其中键是一个抽签中的数字,值是一个计数(该数字被绘制了多少次)

例如,

代码语言:javascript
复制
List<Draw> drawList = Arrays.asList(new Draw(1,2,5), new Draw(1,5,6));

我想得到一张如下所示的地图:{1=2,2=1,5=2,6=1}

我可以使用java 8的新groupingBy操作或其他新特性来实现这一点吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 13:57:16

如果我把一切都做对了

代码语言:javascript
复制
Map<Integer, Long> map = drawList
      .stream()
      .flatMap(x -> Stream.of(x.getNum1(), x.getNum2(), x.getNum3()))
      .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

System.out.println(map); // {1=2, 2=1, 5=2, 6=1}

或者显然是这样的:

代码语言:javascript
复制
Map<Integer, Long> map2 = drawList
            .stream()
            .flatMap(x -> x.getResultAsList().stream())
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45192718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档