List 去重操作

List中保存数据是有序不唯一的,所以经常会出现重复的数据,在我们通过List中的数据对其他数据进行操作时就会出现重复操作,我在进行财务金额计算的时候出现的重复的数据,导致金额数目不对,因此发现去重操作的重要性。
下面介绍几种常用的去重操作的方法:

1、set特性去重

set集合的特点是无序且唯一的,所以可以利用set的特性进行去重操作

//要去重的List
List<String> list;
Set<String> set = new HashSet<>();
//将list的数据全部添加到set集合中,因为set集合通过hash值进行查重,所以重复的数据会被排除出去
set.addAll(list);
//此时的set里的数据就是list集合中去除所有重复值的数据,但顺序也会发生改变
//再将set的数据替换掉list的数据即可达到去重的目的
list = new ArrayList<>();
list.addAll(set);

**注意:**set在进行判断是否相同的时候是根据hash值进行判断的,所以如果你要去重的是你手写的对象,那么你需要重写这个对象的getHashCode()方法。以保证不会去根据在堆内存中的地址去判断是否相同。

2、根据对象中的某个属性或多个属性进行去重

使用的是JDK8 的流式化以及Lambda表达式,其中的关键是给TreeSet一个比较器,所以原理还是利用的set集合的唯一性

//假设对人员信息进行去重
List<User> list;
list = list.stream().collect(Collectors
.collectingAndThen(Collectors.toCollection( () -> 
new TreeSet<>(Comparator,comparing(user -> 
user.getUsername+ ";" + user.getIDCard()))),ArrayList::new));
//通过姓名和身份证号进行去重

这种方式的好处是可以自由的根据属性进行判断是否重复,但是只在JDK8以上的版本才支持,所以如果你的项目是JDK8以下的版本请果断放弃这种写法。

** 3、** 另外还有List本身的contains()方法,如果去重的是对象,则就要重写对象的equals()方法。

如有不对请大佬指教!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
有多种方法可以在Java中对List进行去重。 一种方法是使用双重for循环来去重。你可以遍历List中的每个元素,然后再遍历剩下的元素,如果发现重复的元素,就将其从List中移除。这样就可以实现去重。例如,在给定的代码中,通过双重for循环去重的方法被用来去除List中的重复项。 另一种方法是使用Java 8中的Stream API。你可以将List转换为一个Stream,然后使用distinct()方法去除重复项,最后将结果收集到一个新的List中。这样就能得到一个没有重复项的List。在给定的代码中,通过Stream API的方式去重的方法被用来从List中删除重复项。 还有一种方法是使用HashSet。你可以将List转换为HashSet,因为HashSet具有去重的特性,然后再将HashSet转换回List。这样就能得到一个没有重复项的List。在给定的代码中,通过使用HashSet去重的方法被用来去除List中的重复项。 根据你的需求和具体情况,你可以选择其中一种方法来进行list去重操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [java List去除重复数据的五种方式](https://blog.csdn.net/m0_67900727/article/details/123422447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [JavaList去重的 6种方法](https://blog.csdn.net/weixin_43825761/article/details/127778880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值