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);}再次感谢尤金)