java对list分组_Java List排序,分组等操作

时间:2024-11-08 19:09:21

假定有一列实体类对像

List list = ();

去重,去除重复对象(每个属性的值都一样的),需要注意的是要先重写对象User的equals和hashCode方法

List distinctList = ().distinct().collect(());

排序,按id升续排列,如果要降续则改成:(a, b) -> () - (); a和b都是变量名(可以按自己意愿取名字),都是list中的对象的实例

List sortList = ().sorted((a, b) -> () - ()).collect(());

过滤,按照自己的需求来筛选list中的数据,比如我筛选出不及格的(小于60分)的人,t为实例

List filterList = ().filter(t -> () < 60).collect(());

map, 提取对象中的某一元素,例子中我取的是每个人的name,注意list中类型对应,如果取的是id或者班级,就应该是integer类型

List mapList = ().map(t -> ()).collect(());

统计,统计所有人分数的和, 主要我设置的分数属性是double类型的,所以用mapToDouble,如果是int类型的,则需要用mapToInt

double sum = ().mapToDouble(t -> ()).sum();

int count = ().mapToInt(t -> ()).sum();

分组, 按照字段中某个属性将list分组

Map> map = ().collect((t -> ()));

("按年级分组"+map);

/*然后再对map处理,这样就方便取出自己要的数据*/

for(> entry : ()){

("key:"+());

("value:"+());

}

多重分组,先按年级分组,再按班级分组

Map>> groupMap = ().collect((t -> (), (t -> ())));

("按照年级再按班级分组:"+groupMap);

("取出一年级一班的list:"+(1).get(1));

多重分组,一般多重分组后都是为了统计,比如说统计每个年级,每个班的总分数

Map> sumMap = ().collect((t -> (), (t -> (), (t -> ()))));

(sumMap);

("取出一年级一班的总分:"+(1).get(1));

stream是链式的,这些功能是可以一起使用的,例如:计算每个年级每个班的及格人数

Map> integerMap = ().filter(t -> () >= 60).collect((t -> (), (t -> (), ())));

("取出一年级一班及格人数:"+(1).get(1));