java jdk1.8 使用stream流进行list 分组归类操作
我就废话不多说了,大家还是直接看代码吧~
importcom.alibaba.fastjson.JSON;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.stream.Collectors;
/**
*@authorczw
*/
publicclassFoo{
privateStringname;
privateStringtype;
privateDoubletypeValue;
privateIntegercount;
publicFoo(Stringname,Stringtype,DoubletypeValue,Integercount){
this.name=name;
this.type=type;
this.typeValue=typeValue;
this.count=count;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
publicDoublegetTypeValue(){
returntypeValue;
}
publicvoidsetTypeValue(DoubletypeValue){
this.typeValue=typeValue;
}
publicIntegergetCount(){
returncount;
}
publicvoidsetCount(Integercount){
this.count=count;
}
@Override
publicStringtoString(){
return"Foo{"+
"name='"+name+'\''+
",type='"+type+'\''+
",typeValue="+typeValue+
",count="+count+
'}';
}
publicstaticvoidmain(String[]args){
ListfooList=newArrayList();
fooList.add(newFoo("A","san",1.0,2));
fooList.add(newFoo("A","nas",13.0,1));
fooList.add(newFoo("B","san",112.0,3));
fooList.add(newFoo("C","san",43.0,5));
fooList.add(newFoo("B","nas",77.0,7));
List>groupList=newArrayList<>();
fooList.stream()
.collect(Collectors.groupingBy(Foo::getName,Collectors.toList()))
.forEach((name,fooListByName)->{
groupList.add(fooListByName);
});
System.out.println(JSON.toJSONString(groupList));
}
}
输出结果
[
[{
"count":2,
"name":"A",
"type":"san",
"typeValue":1
},{
"count":1,
"name":"A",
"type":"nas",
"typeValue":13
}],
[{
"count":3,
"name":"B",
"type":"san",
"typeValue":112
},{
"count":7,
"name":"B",
"type":"nas",
"typeValue":77
}],
[{
"count":5,
"name":"C",
"type":"san",
"typeValue":43
}]
]
补充知识:javajdk1.8的stream复杂和简单的分组
获取List对象中的某个参数时:
List
简单参数分组:
ListdamoformList=newArrayList<>(); Map >>collect=damoformList.stream() .collect(Collectors.groupingBy(DamoForm::getId())) .entrySet() .stream() .collect(Collectors.toMap( entry->entry.getKey(), entry->entry.getValue().stream().collect(Collectors.groupingBy(DamoForm::getName())) ));
针对List复杂排序,多个条件进行排序:
应用场景:针对List中某个字段的数据进行双重倒序的方式排序,代码有点复杂,不明白的可以留言。
ListdamoformList=newArrayList<>(); List
以上这篇javajdk1.8使用stream流进行list分组归类操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。