List集合中对对象中的某个属性进行分组、过滤或去重操作

List集合中对对象中的某个属性进行分组、过滤或去重操作

1、根据courseList对象中的userId属性进行分组查询

 Map<String, List<Course>> collect = courseList.stream().collect(Collectors.groupingBy(Course::getUserId));

2、根据courseList对象中的userId属性进行分组查询并对score属性进行汇总

Map<String, Double> collect = courseList.stream().collect(Collectors.groupingBy(Course::getUserId,Collectors.summingDouble(Course::getScore)));

3、判断一组对象里面有没有属性值是某个值

List<User> userList = userDao.getUserList();
boolean isExit= userList .stream().anyMatch(m -> "plan:ctPlan:add".equals(m.getPermission()));

4、取出一组对象的某个属性组成一个新集合

List<String> userNames=userList.stream().map(User::getUserName).collect(Collectors.toList());

5、去除list中所有重复的数据

list = list.stream().distinct().collect(Collectors.toList());

5、根据list中的某个属性添加条件过滤数据

list = list.stream().filter(u -> !u.getCourseName().equals("语文")).collect(Collectors.toList());

5、对Map<Object, List>类型数据进行遍历

查了很多资料以后发现这种类型的例子少之又少,所以还是想分享一个实际的例子,首先获取数据列表

 List<JSONObject> list = loyaltyDao.getMemberMovement(jsonObject);

然后根据list中的某个属性进行分组,其中JSONObject是对象,registerChannel是对象的一个属性

 Map<Object, List<JSONObject>> channelNameMap =
                list.stream().collect(Collectors.groupingBy(m -> (m.get("registerChannel").toString())));

再遍历map集合,拿到每一个List数组进行分别处理

for (Map.Entry<Object, List<JSONObject>> objectListMap:channelNameMap.entrySet()){
List<JSONObject> memberMovementList = objectListMap.getValue();
 for (JSONObject object:memberMovementList){
               ......
            }
}

对List中某个属性或某几个属性进行排序

//获取数据列表
List<JSONObject> resList = loyaltyDao.getMemberMovement(jsonObject);
//对resList列表里的RR、Rank属性进行排序
resList.sort((o1, o2) -> {
            int cmp = o2.getDouble("RR").compareTo(o1.getDouble("RR"));
            if (cmp == 0) {
                cmp = o1.getInteger("RANK").compareTo(o2.getInteger("RANK"));
            }
            return cmp;
        });
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值