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;
});