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 ...
随机推荐
- idea代码爆红,clean,或者maven reimport都不起作用
1 突然自己的idea的Maven项目代码都是爆红,但是可以运行,添加新的代码确无法运行 尝试了clean,或者reimport,甚至是大家推荐的,刷新缓存重启也没有作用 2 检查项目的jdk配置,也 ...
- Kubernetes的yaml文件中command的使用
前面说了init容器initContainers,这主要是为应用容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写写command的用法. command就是将命令在创 ...
- linux usb驱动记录(一)
一.linux 下的usb驱动框架 在linux系统中,usb驱动可以从两个角度去观察,一个是主机侧,一个是设备侧.linux usb 驱动的总体框架如下图所示: 从主机侧看usb驱动可分为四层: ...
- Django 语法笔记
Django 语法 创建项目框架 django-admin startproject 项目名 创建子app 业务分化,可以优化团队合作,可以明确找锅 python manage.py startapp ...
- Gym - 101492I 区间限制费用流
https://cn.vjudge.net/problem/Gym-101492I 如果用单个点代表每个区间 利用拆点来限制区间的流量的话 点是 n^2/2+m个 边是2*n^2条 但是这样会T 解法 ...
- ubuntu 中 搭建 C编程环境
在 ubuntu 中 使用 快捷键 Ctrl + Alt + T 打开 终端 在终端输入 gcc 查看 有没有安装 gcc (c语言的编译器) ( 我这里是 已经 安装 好的 ) 进行 安装 gcc ...
- python内置函数(二)之filter,map,sorted
filter filter()函数接收一个函数 f 和一个iterable的对象,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条 ...
- Java项目出现的问题01----学习
0 运行环境 MyEcplise2016+Tomcat8.0 1 今天在html的表格提交跳转时发现,想要提交到自己写servlet程序中,却发现总是出错http://localhost:8080/T ...
- scrollTop([val])
scrollTop([val]) 概述 获取匹配元素相对滚动条顶部的偏移.广州大理石机械构件 此方法对可见和隐藏元素均有效. 参数 valString, NumberV1.2.6 设定垂直滚动条值 示 ...
- Codevs 1331 西行寺幽幽子(高精度)
1331 西行寺幽幽子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵.不过幽幽子可不是只 ...