去掉List中所有重复对象

去掉List中所有重复对象

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

代码块

List 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 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 set= new HashSet<>();
        Map 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 districtList2 = set.stream().collect(Collectors.toList()); 
  

                            
                        
                    
                    
                    

你可能感兴趣的:(java)