java8新特性将List中按指定属性排序过滤重复数据的方法

作者:龙猫大侠客 时间:2023-06-16 17:57:42 

在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List中放的是一个类,类中有多个属性,要过滤重复数据,而且这个重复数据要按自己指定的属性过滤,但是要想按照其它属性排序顺序过滤,所以要先排序一下,然后按照某个属性过滤。

实体类如下所示,大家只要创建下面的实体类,无需继承父类,大家不会注解式风格的话,请自行加上getter/setter方法。

java8新特性将List中按指定属性排序过滤重复数据的方法

  • 首先看看graphResults这个List里面究竟有什么数据,数据显示如下,由于数据量较多,以下仅显示要处理的条数,以及大概结构,大家可仔细看看17:30分这个时间的数据,下面主要处理这个时间点。

  • 现在我要对这个List做如下处理

  1. 按时间顺序排序

  2. 在时间排序的基础上再对pv1Power和pv2Power从大到小排序

  3. 过滤重复时间且功率为0的无效字段,仅保留一个有效字段,若全部为0也要保留成仅有一条该时间的数据

java8新特性将List中按指定属性排序过滤重复数据的方法

为了适应以上需求,采用jdk1.8的新特性steam流来做,整体思路,是将List放入stream流中,然后进行依次排序,要过滤重复时间段的数据,当然要Set集合来登场,要按指定属性过滤,当然要传一个时间,最后返回List集合。


//先按日期从小到大排序,再按功率从大到小,之后放入集合中过滤重复,返回List
     graphResults = graphResults.stream().sorted(Comparator.comparing(GraphResult::getDate)
         .thenComparing((o1, o2) -> Integer.compare(o2.getPv1Power(), o1.getPv1Power()))
         .thenComparing((o1, o2) -> Integer.compare(o2.getPv2Power(), o1.getPv2Power())))
         .collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
             new TreeSet<>(Comparator.comparing(GraphResult::getDate))), ArrayList::new));//过滤重复时间点

通过上述代码运行后的结果就显而易见了,发现17点30分这个时间不重复了,而且无效数据也不存在了,完美的实现了以上的需求

java8新特性将List中按指定属性排序过滤重复数据的方法

总结

以上所述是小编给大家介绍的java8新特性将List中按指定属性排序过滤重复数据的方法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/longmaodaxia/archive/2019/08/06/11308333.html

标签:java,8,新特性,排序,过滤
0
投稿

猜你喜欢

  • Java实现人脸识别登录、注册等功能(最新完整版)

    2022-09-25 00:20:13
  • 在WPF中动态加载XAML中的控件实例代码

    2023-06-23 12:27:30
  • C#实现伪装文件夹功能

    2023-04-28 14:21:38
  • Java实现单例模式之饿汉式、懒汉式、枚举式

    2022-12-17 17:50:13
  • shiro整合springboot前后端分离

    2022-02-22 10:40:31
  • java底层JDK Logging日志模块处理细节深入分析

    2023-02-04 12:47:31
  • Android WebView 的简单使用

    2021-09-01 11:52:54
  • 超详细的Java 问题排查工具单

    2023-02-10 06:02:17
  • Java在web页面上的编码解码处理及中文URL乱码解决

    2023-08-25 11:10:19
  • Java流程控制语句最全汇总(上篇)

    2023-11-03 01:57:48
  • JWT.net 操作实践方法

    2022-04-09 16:01:28
  • Android ViewPager导航小圆点实现无限循环效果

    2022-07-09 13:10:33
  • Android studio 出现 Unsupported major.minor version 52.0解决办法

    2023-12-01 18:30:53
  • C#生成随机数的方法小结

    2023-03-30 22:07:33
  • mybatis中foreach嵌套if标签方式

    2023-11-20 23:11:05
  • C#中反射和扩展方法如何运用

    2023-08-02 01:43:16
  • 通过FancyView提供 Android 酷炫的开屏动画实例代码

    2023-04-11 11:00:53
  • Java实现在线聊天功能

    2021-10-18 22:16:23
  • 详解SpringBoot构建的Web项目如何在服务端校验表单输入

    2021-08-22 23:51:59
  • SpringCloud让微服务实现指定程序调用

    2022-03-05 23:24:15
  • asp之家 软件编程 m.aspxhome.com