Java中List泛型Map根据某一个key去重,保留一个数据。利用jdk8stream流实现去重

时间:2025-03-20 07:56:26
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")); } } }