对象去重 ,可自定义实现去重方法,增加特有操作(如:指点字段拼接到一起)

public class Test {public static class Data extends LambdaUtils<Data>{private String key;private String value;public Data(String key, String value) {this.key = key;this.value = value;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}/*** 去重,指定字段拼接* @Author hao_hl1314* @Date 16:28 2019-06-26* @Param [obj, seen]* @return boolean**/@Overridepublic boolean customFilter(Data obj, Map<Object, LambdaUtils> seen) {Data data = (Data) seen.putIfAbsent(obj.getKey(),obj);if(data == null){return true;}data.setValue(data.getValue() + obj.getValue());seen.put(data.getKey(),data);return false;}}public static abstract class LambdaUtils<T>{/*** 自定义去重实现* @Author hao_hl1314* @Date 16:35 2019-06-26* @Param [obj, seen]* @return boolean**/public abstract boolean customFilter(T obj,Map<Object,LambdaUtils> seen);/*** 自定义去重* @Author hao_hl1314* @Date 16:34 2019-06-26* @Param [extractor]* @return java.util.function.Predicate<T>**/public static <T> Predicate<T> distinctByCustom(Function<? super T,LambdaUtils> extractor) {Map<Object, LambdaUtils> seen = new ConcurrentHashMap<>();return t -> extractor.apply(t).customFilter(extractor.apply(t),seen);}/*** 指定Key去重* @Author hao_hl1314* @Date 16:34 2019-06-26* @Param [extractor]* @return java.util.function.Predicate<T>**/public static <T> Predicate<T> distinctByKey(Function<? super T,Object> extractor) {Map<Object, Boolean> seen = new ConcurrentHashMap<>();return t -> seen.putIfAbsent(extractor.apply(t),Boolean.TRUE) == null;}}@Testpublic void testUnique(){List<Data> datas = new ArrayList<>();datas.add(new Data("1","1"));datas.add(new Data("1","2"));datas.add(new Data("1","3"));datas.add(new Data("2","4"));//去重List<Data> unique = datas.stream().filter(LambdaUtils.distinctByCustom(data -> data)).collect(Collectors.toList());System.out.println(JSON.toJSONString(unique));}}

运行结果

java strem filter 对象自定义去重相关推荐

  1. java中给对象的List集合去重的几种方法(Lambda)

    java中给对象的List集合去重的几种方法 前言 一.lambda表达式的去重方式 二.Stream API中的collect去重方法 三.Stream API 中的distinct方法去重 前言 ...

  2. java 集合中对象的排序 和去重

    对list 集合对象中 重复度数据进行排序 1.实体类 中 实现 Comparable 接口中的compareTo 方法 用 什么来比较 集合中的排序 2.对集合中的的对象进行去重,重写 hashCo ...

  3. java sessionstate_在Java Web开发中自定义Session

    Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...

  4. Java过滤器Filter讲解(Java基础)

    你好我是辰兮,很高兴你能来阅读,本篇文章小结了Java过滤器的知识点,献给初学者,分享获取新知,希望我们一起进步. 文章目录 一.什么是过滤器 二.如何编写过滤器 三. 过滤器的配置 四.Filter ...

  5. java 过滤器Filter

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  6. java类与对象作用_Java类与对象

    ●类和对象的关系: 一:类是对同一类事物(对象)的抽象,对象实际存在的该类的各种实体. 二:面向对编程的核心:找合适的对象来做合适的事. 三:Java中找到对象: 1):sun自己定义好的类,必须知道 ...

  7. c#对象集合去重_C# List集合去重操作注意点

    今天调试代码时发现list的distinct方法在对引用类型操作时并没有去重,后来查阅资料发现list去重操作对象集合时比较的是对象的一个个引用地址, 因为集合里的对象都是一个个单独的实例,所以并不会 ...

  8. 杨校老师课堂之Java类与对象、封装、构造方法

    杨校老师课堂之Java类与对象.封装.构造方法 本篇文章内容如下: 面向对象 类与对象 三大特征--封装 构造方法 教学目标 能够理解面向对象的思想 能够明确类与对象关系 能够掌握类的定义格式 能够掌 ...

  9. Java虚拟机:对象创建过程与类加载机制、双亲委派模型

    一.对象的创建过程: 1.对象的创建过程: 对象的创建过程一般是从 new 指令(JVM层面)开始的,整个创建过程如下: (1)首先检查 new 指令的参数是否能在常量池中定位到一个类的符号引用: ( ...

最新文章

  1. Github高赞的YOLOv5引发争议?Roboflow和开发者这样说
  2. pyotrch nn.Conv2d中groups参数的理解
  3. LeetCode--Excel Sheet Column Number
  4. asp.net core结合NLog搭建ELK实时日志分析平台
  5. 多核 linux 绑定,Linux 操作系统下CPU多核心的绑定
  6. 卡诺模型案例分析_3个维度看竞品分析!
  7. 三步法助你快速定位网站性能问题
  8. fastjson android 版本,fastjson 1.1.58.android 发布,Bug 修复版本
  9. Spark on Yarn查看删除日志
  10. Scala关于变长参数
  11. 用计算机完成计算win7,算天数转单位Win7计算器能做得更多
  12. 腾讯入股艺龙,在线旅游市场引发关注
  13. Kafka——Kafka的日志存储(5)
  14. blender使用stereoscopy渲染输出VR图片和视频
  15. 知识图谱嵌入|KG-BERT代码 ConvE ConvR
  16. https://api-hmugo-web.itheima.net 不在以下 request 合法域名列表中,请参考文档:https://developers.weixin.qq.com/minip
  17. ThinkPad装win7系统无法启动的解决办法
  18. Rime中州韵导入极点五笔词库(附:自制词库)
  19. 浪潮和思科联合 华为、新华三怎么看?
  20. bert 环境搭建之PytorchTransformer 安装

热门文章

  1. 华为QUIDWAY系列路由器的负载均衡配置
  2. 数据库面试题之:学生成绩查询
  3. 如何修改源码(以corda为例)
  4. STP报文格式与端口状态
  5. uiautomator2+mitmproxy+weditor+Python3抖音数据抓取
  6. 《图解TCP/IP》笔记(八)MLD、IP任播、通信质量控制和显式拥塞通知
  7. 新浪支付涉嫌9项违法行为 已被央行北京营管部罚款1718万元
  8. 《开运斗地主》隐私政策
  9. 并查集 rank+路径压缩
  10. 拓扑发现-异常测试1