去掉List中所有重复对象

去掉List中所有重复对象

如果List中有两个重复的对象,把这两个对象都从List中取出。

代码块

List<Object> list = new ArrayList<>();
        String str1 = new String("金");
        String str2 = new String("木");
        String str3 = new String("水");
        String str4 = new String("火");
        list.add("土");
        list.add("金");
        list.add("水");
        list.add("火");
        list.add(str1);
        list.add(str2);
        list.add(str3);
        list.add(str4);

先将list转成map,对象为key,用 groupingBy 进行分组计算. 每个key出现的次数为这个map的value。
然后将这个map过滤,需要先用entrySet()转成set,将value值大于1的过滤掉。剩下的就是所有不重复的了。

//lambda表达式
        List<Object> districtList1 = list.stream().collect(Collectors.groupingBy(p -> p,Collectors.counting()))
                .entrySet().stream().filter(entry -> entry.getValue() == 1).map(Map.Entry::getKey).collect(Collectors.toList());

上面lambda表达式比较难看,下面可以变成普通代码就是这样。

        Set<Object> set= new HashSet<>();
        Map<Object,Integer> map = new HashMap<>();
        list.stream().forEach(key -> {
            set.add(key);//先用set去重
            map.put(key, (map.get(key) == null ? 0 : map.get(key)) + 1);//同时也再map中记录下这个key出现过的次数
            if(map.get(key) > 1){//如果出现的次数大于1,将这个key从set中去掉
                set.remove(key);
            }
        });
        List<Object> districtList2 = set.stream().collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值