Java中List泛型Map根据某一个key去重,保留一个数据。利用jdk8stream流实现去重
package com.jsjn.skylark.service.service.wechat.xxw;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @author zym
* @date: 2020/6/23 14:16
*/
public class TestDistinct {
/**
* 去重结构
* @param keyExtractor
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
public static void main(String[] args) {
Map hashMap1 = new HashMap<>();
hashMap1.put("class","三年级1班");
hashMap1.put("age",18);
hashMap1.put("name","小张");
Map hashMap2 = new HashMap<>();
hashMap2.put("class","三年级1班");
hashMap2.put("age",18);
hashMap2.put("name","小李");
Map hashMap3 = new HashMap<>();
hashMap3.put("class","三年级2班");
hashMap3.put("age",18);
hashMap3.put("name","小红");
Map hashMap4 = new HashMap<>();
hashMap4.put("class","三年级3班");
hashMap4.put("age",18);
hashMap4.put("name","小白");
List<Map> list=new ArrayList<>();
list.add(hashMap1);
list.add(hashMap2);
list.add(hashMap3);
list.add(hashMap4);
System.out.println("根据班级名称去重前:");
for (Map map:list){
System.out.println(map.get("class"));
}
List<Map> list1 = list.stream()
.filter(distinctByKey(o -> o.get("class")))
.collect(Collectors.toList());
System.out.println("******************************************");
System.out.println("按照班级名称去重后");
for (Map map:list1){
System.out.println(map.get("class"));
}
}
}