java8 Stream对List包含的map中的key进行去重

java8 Stream对List进行去重

由于最近才接触java8,语法还不是很熟,用了一段时间之后发现灰常好用,今天遇到一个难题,我有一个List<>,我需要对map里面的字段进行去重,这就难到我了,经过一番百度,找到了合适的解决方案,但是我不是很理解这段代码,特此记录,知道的请求解答。
我的数据结构如下:
java8 Stream对List包含的map中的key进行去重_第1张图片
我们可以看到里面又两条重复的记录,此时我们想根据map的key进行去重应该怎么做呢?


    public static void main(String[] args) {
        List<Map<String, String>> list = new ArrayList<>(16) ;
        Map<String,String> map1 = new HashMap<>(16);
        map1.put("key1", "val1");
        Map<String,String> map2 = new HashMap<>(16);
        map2.put("key1", "val1");
        list.add(map1);
        list.add(map2);
        //打印list里面的数据
        list.forEach(System.out::println);

        ArrayList<Map<String, String>> data = list.stream().collect(
                Collectors.collectingAndThen(Collectors.toCollection(
                        () -> new TreeSet<>(Comparator.comparing(m -> m.get("key1")))), ArrayList::new));
         System.out.println("=======去重前后分界线=======");
         //打印过滤后的数据
         data.forEach(System.out::println);
    }
    }
    


打印结果如下:

{key1=val1}
{key1=val1}
=======去重前后分界线=======
{key1=val1}

你可能感兴趣的:(java)