public classgroupingBy {public static voidmain(String[]args) {ArrayListlist = newArrayList<>();list.add(newStudent("王一",21,"11",1, newBigDecimal("193.0"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(15L))));list.add(newStudent("郑二",22,"22",0, newBigDecimal("171.0"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusHours(16L))));list.add(newStudent("张三",23,"33",1, newBigDecimal("180.1"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusSeconds(500L))));list.add(newStudent("李四",24,"44",0, newBigDecimal("183.2"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(18L))));list.add(newStudent("赵五",25,"55",1, newBigDecimal("178.3"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(13L))));list.add(newStudent("韩六",26,"88",0, newBigDecimal("169.4"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(1L))));list.add(newStudent("田七",27,"77",1, newBigDecimal("173.5"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(17L))));list.add(newStudent("卢八",28,"88",0, newBigDecimal("159.6"),Timestamp.valueOf(LocalDateTime.now()),Timestamp.valueOf(LocalDateTime.now().plusMinutes(1L))));//        list.add(new Student("钱九", 29, null, 1, new BigDecimal("180.1")));//        list.add(new Student("魏十", null, "99", null, null));//        list.add(new Student("肖十一", null, "", null, null));//        list.add(new Student("柘十二", null, null, null, null));//1根据性别进行分组//1.1为null的数据不需要,直接过滤Map>collect = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.groupingBy(Student::getGender));//1.2需要保留为null的数据Map extendsSerializable,List>collect1 = list.stream().collect(Collectors.groupingBy(a -> {if(a.getGender()== null) {return"null";}returna.getGender();}));//2根据性别分组后,再根据分数分组,>=60:A <60:B为null的数据保留Map extendsSerializable,Map>>collect2 = list.stream().collect(Collectors.groupingBy(a -> {if(a.getGender()== null) {return"null";}returna.getGender();},Collectors.groupingBy(b -> {String score = b.getScore();if(score == null) {return"B";}else{returnscore.compareTo("60")>= 0? "A": "B";}})));//3按照gender和height分组,TreeMap默认按key升序TreeMap key不能为nullTreeMap>collect3 = list.stream().collect(Collectors.groupingBy(a -> {if(a.getGender()== null|| a.getHeight()== null) {return"null";}returna.getGender()+ "->"+ a.getHeight();},TreeMap::new,Collectors.toList()));//统计gender为1和0的人数Map extendsSerializable,Long>collect4 = list.stream().collect(Collectors.groupingBy(a -> {if(a.getGender()== null) {return"mix";}returna.getGender();},counting()));//按gender分组后,统计60为分界的人数Map>collect5 = list.stream().collect(Collectors.groupingBy(//gender分组a -> {if(a.getGender()== null) {return"null";//gender为null}returna.getGender()== 1? "M": "F";},Collectors.groupingBy(//60为分界b -> {String score = b.getScore();if(score == null) {return"null";}else{returnscore.compareTo("60")>= 0? "A": "B";}},counting()//统计)));//统计60分界的男女各多少Map>collect6 = list.stream().filter(a -> StringUtils.isNoneBlank(a.getScore()))//过滤score为""和null的数据.filter(b -> b.getGender()!= null)//过滤gender为null的数据.collect(Collectors.groupingBy(c -> c.getScore().compareTo("60")>= 0? "G": "B",//以60分组Collectors.groupingBy(Student::getGender,//以gender分组counting()//统计)));//统计男女各年龄之和Mapcollect7 = list.stream().filter(a -> a.getAge()!= null|| a.getGender()!= null).collect(Collectors.groupingBy(Student::getGender,Collectors.summingInt(Student::getAge)));//分组元素存储在自定义集合Map>collect8 = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.groupingBy(Student::getGender,Collectors.mapping(Student::getAge,toCollection(TreeSet::new))));//计算男女中最高的分数Mapcollect9 = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.groupingBy(Student::getGender,Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Student::getScore)),Optional::get)));//计算男女中最低的分数Mapcollect10 = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.toMap(Student::getGender,Function.identity(),BinaryOperator.minBy(Comparator.comparing(Student::getScore))));// //计算男女中最高的分数 分数相同去用时最短Mapcollect11 = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.toMap(Student::getGender,//性别Function.identity(),//t->tBinaryOperator.maxBy(Comparator.comparing(Student::getScore)//分数比较.thenComparing(b -> b.getEndTime().getTime()- b.getStartTime().getTime()//分数相同,按时间比较,Comparator.reverseOrder()))//外层用的max,故此处排序取反));//相同的存放在list中TreeMapcollect12 = list.stream().filter(a -> a.getGender()!= null).collect(Collectors.toMap(Student::getGender,Function.identity(),BinaryOperator.maxBy(Comparator.comparing(Student::getScore).thenComparing(b -> b.getEndTime().getTime()- b.getStartTime().getTime(),Comparator.reverseOrder())),TreeMap::new));HashMap>hashMap = newHashMap<>();collect12.forEach((k,v)-> {Map>listMap = list.stream().filter(a ->

k.equals(a.getGender())&& v.getScore().equals(a.getScore())&& (a.getEndTime().getTime()-a.getStartTime().getTime())==(v.getEndTime().getTime()- v.getStartTime().getTime())).collect(Collectors.toMap(Student::getGender,t -> {Liststudents = Collections.singletonList(t);return newArrayList<>(students);},(v1,v2)-> {v2.addAll(v1);returnv2;}));hashMap.putAll(listMap);});//分数最高用时最短Optionalmax = list.stream().max(Comparator

.comparing(Student::getScore).thenComparing(a -> a.getEndTime().getTime()- a.getStartTime().getTime(),Comparator.reverseOrder()));Student student = max.isPresent()? max.get(): null;//最大值 分数 用时Student student1 = list.stream().max(Comparator

.comparing(Student::getScore).thenComparing(a -> a.getEndTime().getTime()- a.getStartTime().getTime(),Comparator.reverseOrder())).orElse(null);//男女各组的平均分数Mapcollect13 = list.stream().filter(a -> a.getGender()!= null).filter(b -> StringUtils.isNoneBlank(b.getScore())).collect(Collectors.groupingBy(Student::getGender,Collectors.averagingDouble(a -> Double.parseDouble(a.getScore()))));System.out.println();}}

collectors 求和_Collectors.groupingBy() 分组、求和、统计、平均、最大(小)值相关推荐

  1. collectors排序_Collectors.groupingBy分组后的排序问题

    默认groupingBy代码里会生成一个HashMap(hashMap是无序的,put的顺序与get的顺序不一致) HashMap是无序的,HashMap在put的时候是根据key的hashcode进 ...

  2. java stream实现分组BigDecimal求和,自定义分组求和

    前言 随着微服务的发展,越来越多的sql处理被放到java来处理,数据库经常会使用到对集合中的数据进行分组求和,分组运算等等. 那怎么样使用java的stream优雅的进行分组求和或运算呢? 一.准备 ...

  3. java steam 排序_java8 stream自定义分组求和并排序的实现

    本文主要介绍了java8 stream自定义分组求和并排序的实现,分享给大家,具体如下: public static void main(String[] args) { List list = ne ...

  4. Java 8中 直接通过List进行分组求和

    // Java8 中 List.stream的分组求和方法Map<String, Long> map = list.stream().collect(Collectors.grouping ...

  5. R语言分组求和,分组求平均值,分组计数

    我们经常可能需要把一个数据按照某一属性分组,然后计算一些统计值.在R语言里面,aggregate函数就可以办到. ## S3 method for class 'data.frame' aggrega ...

  6. c语言分组求和函数,R语言 实现data.frame 分组计数、求和等

    df为1个data.frame对象,有stratum和psu两列,这里统计stratum列计数 方法1: cnt = table(df$stratum) 方法2: cnt = tapply(df$ps ...

  7. mysql学习笔记——分组排序、分组求和

      在 MySQL8.0 版本之前,是没有类似 Oracle.SQLserver.postgresql 等数据库中像 "select 窗口函数 over (partition by 用于分组 ...

  8. linq 分组求和的一般方法

    //var query = from d in expenseApplyModel.ApplyBillList.AsEnumerable() // group d by d.ExpenseItemID ...

  9. C语言指针年龄段分组,[问题]数字分组求和,当和最大的组与和最小的组差最小时,输出...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 经过一个月的学习.我想出来了一种算法,各位高手指点 我是楼主 #include int arrgroup[11]={0}; /*表示分组情况的数组*/ i ...

最新文章

  1. python字符串与列表的相互转换
  2. docker安装运行qq
  3. vlc学习计划(5)--VLC程序宏及线程分析
  4. matlab画多组数据折线图_Python数据分析之初识可视化
  5. 数组的循环及跌送方式
  6. shell脚本读取csv文件_shell命令实现txt文件转换为csv文件 | 学步园
  7. matlab振荡环节的频率特性,频率特性曲线
  8. mysql注入转义绕过_SQL注入防御绕过——二次注入
  9. php高清晰度无损压缩
  10. relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared objec
  11. 深度至尊 GHOST XP SP3 纯净版 V4.0
  12. XTOOL EZ500全系统的诊断和特殊功能超越Xtool EZ400 EZ300 Xtool PAD
  13. 1.决策树 实例:泰坦尼克号幸存者的预测
  14. OpenCL设备存储形式
  15. 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
  16. 著者四角号码查询_著者姓名汉语拼音与四角号码数字混编书次号的应用
  17. 【UnblockNeteaseMusic】代理网易云后隐藏NODE代理窗口方法
  18. [渝粤教育] 深圳信息职业技术学院 《新理念英语》English For You 参考 资料
  19. 负数在java_在负数中使用Java纪元秒
  20. 计算机综合实践免修 华东师范大学,电子技术综合实践

热门文章

  1. 【编程马拉松】【025-数字三角形 】
  2. wordpress-Kratos免费中文极简响应式主题模板
  3. 我曾七次鄙视我的灵魂
  4. SymMover:帮windows下的软件和游戏好发无伤的“搬家”
  5. 魅族魅蓝2从源码编译cm14.1-v0.2
  6. 关于smtp.exmail.qq.com:25端口访问超时的问题
  7. label qt 自动换行_qt qlabel 自动换行
  8. 痛苦煎熬的202301-07
  9. 掌握AI图像篡改检测工具,轻松识别图片造假
  10. JAVA毕业设计毕业生离校管理系统计算机源码+lw文档+系统+调试部署+数据库