JAVA 自定义对象集合 List<T> 根据自定义字段去重
1、拥有自定义对象 MyUser
@Data
public class MyUser {
private String userName;
private String passWord;
}
2、编写自定义去重方法实现
/**
* 根据list中对象某些字段去重
* @param list 需要去重的list
* @return 返回去重后的list
*/
private static List<MyUser> removeDuplicateOutputField(List<MyUser> list) {
Set<MyUser> set = new TreeSet<>(new Comparator<MyUser>() {
@Override
public int compare(MyUser myUser, MyUser myUserNew) {
int compareToResult = 1;//==0表示重复
if(StringUtils.equals(myUser.getUserName(), myUserNew.getUserName()) &&
StringUtils.equals(myUser.getPassWord(), myUserNew.getPassWord())) {
compareToResult = 0;
}
return compareToResult;
}
});
set.addAll(list);
return new ArrayList<>(set);
}
注意:其中StringUtils.equals() 传入两个比较对象对应的字段,
比如想要加入userName 字段去重 就要加入 如下条件即可, 想要添加几个字段自行添加即可
StringUtils.equals(myUser.getUserName(), myUserNew.getUserName()) 也可以 使用
myUser.getAge().equals(myUserNew.getAge()) 自行测试决定
3、测试结果
@Test
public void distinctMyUser(){
List<MyUser> list1 = new ArrayList<>();
MyUser user1 = new MyUser();
user1.setUserName("zhangsan");
user1.setPassWord("1234567");
list1.add(user1); MyUser user2 = new MyUser();
user2.setUserName("zhangsan");
user2.setPassWord("123456");
list1.add(user2); MyUser user3 = new MyUser();
user3.setUserName("lisi");
user3.setPassWord("123456");
list1.add(user3); MyUser user4 = new MyUser();
user4.setUserName("lisi");
user4.setPassWord("123456");
list1.add(user4); for (MyUser b: list1) {
System.out.println("去重前:"+b.toString());
} //去重
list1 = removeDuplicateOutputField(list1); for (MyUser b: list1) {
System.out.println("去重后:"+b.toString());
}
}
运行结果如下,达到预期,根据自己想要的字段进行list集合去重操作。

二、List<T> 自定义对象,根据某一列去重,利用lambad 来实现
@Test
public void distinctList() {
AdviceInfo adviceInfo = new AdviceInfo();
adviceInfo.setHospId(8888L);
adviceInfo.setSex("女");
adviceInfo.setAge(22); AdviceInfo adviceInfo2 = new AdviceInfo();
adviceInfo2.setHospId(8888L);
adviceInfo2.setSex("男");
adviceInfo2.setAge(22); ArrayList<AdviceInfo> adviceInfos = Lists.newArrayList();
adviceInfos.add(adviceInfo);
adviceInfos.add(adviceInfo2); adviceInfos.stream().filter(distinctByKey(e -> e.getHospId()))
.collect(Collectors.toList())
.forEach(adviceInfo1 -> System.out.println(adviceInfo1.getSex())); } public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> map = new ConcurrentHashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
运行结果:

JAVA 自定义对象集合 List<T> 根据自定义字段去重的更多相关文章
- Java 中HashTable、HashMap、TreeMap三者区别,以及自定义对象是否相同比较,自定义排序等
/* Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.效率低.基本已废 ...
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- Java ArrayList对象集合去重
import java.util.ArrayList; import java.util.Iterator; public class StringSampleDemo { public static ...
- Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Col ...
- jQuery基础(常用插件 表单验证,图片放大镜,自定义对象级,jQuery UI,面板折叠)
1.表单验证插件——validate 该插件自带包含必填.数字.URL在内容的验证规则,即时显示异常信息,此外,还允许自定义验证规则,插件调用方法如下: $(form).validate({o ...
- java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...
- Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例
1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序:Comparable)
1. TreeSet存储自定义对象并遍历练习2: (1)Student.java package cn.itcast_06; /* * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口 * ...
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)
1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...
随机推荐
- web开发:动画及阴影
一.小米拼接 二.过渡动画 三.过度案例 四.盒子阴影 五.伪类设计边框 一.小米拼接 将区域整体划分起名 => 对其他区域布局不产生影响提出公共css => reset操作当有区域发送显 ...
- 6. Design Patterns with First-Class Functions
1. Refactoring Strategy 1.1 Classic Strategy from abc import ABC, abstractmethod from collections im ...
- django 发送邮件功能
setting.py # 邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.e ...
- python 插件 Flask-装饰器 惰性载入视图
Flask 通常使用装饰器.装饰器简单易用,只要把 URL 放在相应的函数的前面就可以了. 但是这种方式有一个缺点:使用装饰器的代码必须预先导入,否则 Flask 就无法真正找到 你的函数. 当你必须 ...
- 下划线文字,鼠标hover小样式
CSS样式 //不只是a标签,其他有下划线的字体也可以 a:hover{ color: #ff3100; //这里的颜色是指字体颜色不是波浪下划线效果的svg图颜色 text-decorati ...
- 通过自动回复机器人学Mybatis---基础版
第1章 案例简介 介绍要实现的案例情况,后面会通过这个案例来学习 Mybatis 第2章 实战第一部----黎明前的黑暗 在没有 Mybatis 的情况下,使用 Jsp + Servlet + Jdb ...
- service worker在移动端H5项目的应用
1. PWA和Service Worker的关系 PWA (Progressive Web Apps) 不是一项技术,也不是一个框架,我们可以把她理解为一种模式,一种通过应用一些技术将 Web App ...
- js中回调函数(callback)的一些理解
前言 我个人在学习Node.js相关知识时遇到了回调函数这个概念,虽然之前已经在c,c++等编程语言中用到过它,但还一直未对其机制有深入了解,这次就来好好谈一下它. 概念理解 百度对它的解释是回调函数 ...
- 斑马105SLPlus串口打印二维码
1.根据说明书调试硬件,校准介质还有色带(很重要),我自己搞了好几天才搞明白. 2.设置好参数,比如打印介质连续.非连续,热敏还是热转质 3.打印机上电后悔自动校准,校准成功后就可以直接通过串口打印, ...
- 014_linuxC++之_不同类型的继承
#include <iostream> #include <string.h> #include <unistd.h> using namespace std; c ...