List 对象去重 案例

多个 List 合并之去重 (Java)

场景 : 一个列表集合需要合并多个列表,且不能出现重复的元素.
例子 : 权限业务, 一个账号有多个角色 . 每个角色有不同的权限,其中不同角色之间可能会出现重复的权限.

方案 :

(一) 代码 : (效率高 , 利用集合特性合并去重一步到位)

Set<Object> set = new HashSet(); //合集
List<Object> listA = new ArrayList<>(); //A集合
List<Object> listB = new ArrayList<>(); //B集合
set.addAll(listA);
set.addAll(listB);

(二) 代码 : (效率低 , 代码繁多)

A(合集)    B(集合)     C(集合)
先分别把 BC集合的元素单个添加至 A集合,在来判断 value 是否相等来达到去重的效果(如果是对象类型的话会多一步).


(三) 代码 : (效率低 , 代码比二少)
使用List 的 addAll() 方法, 然后在去重.


附 : 对象去重需要相应的去重对象重写 hashcode() 与 equals()方法.
因为Object 的 equals() 方法是比较内存地址 两个对象的内存地址当然不相等,但是对象的值是相同的,所以得重写equals()方法,为什么要重写hashcode()呢,虽然此处比较只用到了equals()方法,但是当对象用到Hash相关的包后,需要用到hashcode()方法来判断就会造成相等对象但是不相等的哈希码,所以规定要一起重写. 对象去重的不重写比较方法的话还可以使用比较器来实现: (例子)

Set<Object>  rs = new TreeSet<Object>(new Comparator<Object>() {
       @Override
       public int compare(Object a1, Object a2) {
          return a1.getValue().compareTo(a2.getValue());
       }
});
通过比较对象的Value属性来判断是否相等.

可以参考这篇文章 : 点我

附二: 方法二利用流式操作

//实体对象
public class AreaInfo{
	private String provinceCode;
	private String name;
}

List<AreaInfo> list =  new ArrayList<>();
......省略添加重复对象数据代码

//------------------[根据属性(provinceCode)去重]----------------
List<AreaInfo> provinces = list.stream().collect(collectingAndThen(
                    toCollection(() -> new TreeSet<AreaInfo>(
                            comparing(areaInfo->areaInfo.getProvinceCode()))),ArrayList::new));

小伙伴还有新的想法可以在评论区留言哦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值