Java 8 java 8按列表的列表分组

Java 8 java 8按列表的列表分组,java-8,mapping,grouping,java-stream,collect,Java 8,Mapping,Grouping,Java Stream,Collect,假设我们有一个对象绘制: 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) {

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

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);
}
类绘制{
私有整数num1、num2、num3;
公共提款(整数m1、整数m2、整数m3){
this.num1=num1;
this.num2=num2;
此值为0.num3=num3;
}
公共int getNum1(){
返回num1;
}
公共无效集合num1(整数num1){
this.num1=num1;
}
公共int getNum2(){
返回num2;
}
公共无效集合num2(整数num2){
this.num2=num2;
}
公共int getNum3(){
返回num3;
}
公共空间集合num3(整数num3){
此值为0.num3=num3;
}
公共列表getResultsList(){
返回数组.asList(num1、num2、num3);
}
}

现在,有了绘制列表,我需要得到一个映射,其中key是draw中的一个数字,value是一个计数(这个数字被绘制了多少次)

例如,拥有

List<Draw> drawList = Arrays.asList(new Draw(1,2,5), new Draw(1,5,6));
List drawList=Arrays.asList(新绘图(1,2,5)、新绘图(1,5,6));
我想得到如下的映射:{1=2,2=1,5=2,6=1}

我可以使用Java8的新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=drawList
.stream()
.flatMap(x->Stream.of(x.getNum1(),x.getNum2(),x.getNum3())
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());
System.out.println(映射);//{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()));
Map map2=图纸列表
.stream()
.flatMap(x->x.getResultsList().stream())
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());

谢谢。代码不可编译。我得到“无法推断flatMap的类型参数”(Function@user1712442这很有趣,它使用
javac
对我来说编译得很好。我正在使用Eclipse Neon。但是我找到了使它可编译的方法:{Map Map=drawList.stream().flatMap(x->x.getResultsList().stream()).collect(Collectors.groupingBy(Function.identity(),Collectors.counting());System.out.println(map);}再次感谢尤金)