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