ArrayList<Student> list = Lists.newArrayList(
Student.builder().no("1001").name("小A").score(11d).build(),
Student.builder().no("1001").name("小B").score(12d).build(),
Student.builder().no("1002").name("小C").score(13d).build(),
Student.builder().no("1003").name("小D").score(14d).build(),
Student.builder().no("1003").name("小F").score(14d).build()
);
//正常分组
Map<String, List<Student>> map = list.stream().collect(Collectors.groupingBy(Student::getNo));
System.out.println(JSONObject.toJSONString(map));
//分组定制key
Map<String, List<Student>> map1 = list.stream().collect(Collectors.groupingBy(
obj -> obj.getNo()+"_"+obj.getName()
));
System.out.println(JSONObject.toJSONString(map1));
//根据条件分组
Map<String, List<Student>> map2 = list.stream().collect(Collectors.groupingBy(
obj -> {
if (obj.getScore() >=13){
return "高等级";
}else {
return "低等级";
}
}
));
System.out.println(JSONObject.toJSONString(map2));
//根据条件分组 嵌套分组
Map<String, Map<String,List<Student>>> map3 = list.stream().collect(Collectors.groupingBy(Student::getNo,Collectors.groupingBy(
obj -> {
if (obj.getScore() >=13){
return "高等级";
}else {
return "低等级";
}
}
)));
System.out.println(JSONObject.toJSONString(map3));
//根据条件分组 取某个字段
Map<String, String> map4 = list.stream().collect(Collectors.groupingBy(Student::getNo,
Collectors.mapping(Student::getName,Collectors.joining(",","名称为:[","]"))
));
System.out.println(JSONObject.toJSONString(map4));
//分组之后进行数据转化
Map<String, Student> map5 = list.stream().collect(Collectors.groupingBy(Student::getNo,
Collectors.collectingAndThen(
Collectors.reducing((c1,c2) -> c1.getScore() > c2.getScore() ? c1:c2), Optional::get
)
));
System.out.println(JSONObject.toJSONString(map5));
//分组完成求平均值
Map<String, Double> map6 = list.stream().collect(Collectors.groupingBy(Student::getNo,
Collectors.averagingDouble(Student::getScore)
));
System.out.println(JSONObject.toJSONString(map6));
//分组完成相加成绩作为value
Map<String, Double> map7 = list.stream().collect(Collectors.groupingBy(Student::getNo,
Collectors.summingDouble(Student::getScore)
));
System.out.println(JSONObject.toJSONString(map7));
//分组 根据value进行倒叙
LinkedHashMap<String, Double> map8 = new LinkedHashMap<>();
map7.entrySet().stream().sorted(Map.Entry.<String,Double>comparingByValue()
.reversed()).forEachOrdered(e ->map8.put(e.getKey(),e.getValue()));
System.out.println(map8);
//分组 value是分完组之后的size
Map<String, Long> map9 = list.stream().collect(Collectors.groupingBy(Student::getNo,
Collectors.mapping(Function.identity(), Collectors.counting())
));
System.out.println(map9);
//分组 根据可以排序
HashMap<String, Double> map10= list.stream().collect(Collectors.groupingBy(Student::getNo,
HashMap::new,
Collectors.summingDouble(Student::getScore)
));
System.out.println(map10);
java stream 分组操作
最新推荐文章于 2024-06-05 00:13:21 发布