java-8 - java 8 groupingBy 列表列表

标签 java-8 mapping grouping java-stream collect

假设我们有一个对象 Draw:

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 ,其中键是绘制中的数字,值是计数(绘制该数字的次数)

例如,有
List<Draw> drawList = Arrays.asList(new Draw(1,2,5), new Draw(1,5,6));

我想得到如下 map :{1=2, 2=1, 5=2, 6=1}

我可以使用 java 8 的新 groupingBy 操作或其他新功能来实现吗?

谢谢。

最佳答案

如果我做对了一切:

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}

或者显然是这样的:
Map<Integer, Long> map2 = drawList
            .stream()
            .flatMap(x -> x.getResultAsList().stream())
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

关于java-8 - java 8 groupingBy 列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192718/

相关文章:

dynamic - 在Elasticsearch中关闭了动态映射,但是自定义映射仍然不起作用?

mysql - 基于 mysql 上映射表的列名

Python - 对存储在字典中的列表中的项目进行计数和分组

java - 在 ZonedDateTime 或 Instant 中将时分秒设置为 00

Java流创建对象并比较

arrays - 如何将图像数组映射为每个列表项React JS的两个图像

java - 当组更改时如何更改细节带颜色?

java - 将 double 分组到映射以创建直方图

java - 如何将 getter 作为 lambda 函数传递?

java - 如何在使用流比较 map 时处理 null - Java?