public static void main(String[] args) {//需求:根据List<Map<String,Object>> 的map中name 属性相同去重/////////////////////////////////////////////以下为造数据///////////////////////////////////////////////////////////////////////////////////////// //创建数据,对根据姓名 name 去重 List<Map<String,Object>> allList = new ArrayList<>(); List<Map<String,Object>> smallList = new ArrayList<>(); Map<String,Object> map1 = new HashMap<>(); map1.put("id",2019); map1.put("name","小明"); map1.put("id",2017); map1.put("name","小王"); Map<String,Object> map2 = new HashMap<>(); map2.put("id",2020); map2.put("name","小明"); allList.add(map1); allList.add(map2); smallList.add(map2);/////////////////////////////////////////////以上为造数据///////////////////////////////////////////////////////////////////////////////////////// /*将list map 转list pojo,必须要转成对象,因为要去重某一个属性值,而不是去重整个对象,所以必须重写 这个属性值的hashcode 和equals 值*/ List<U> list1 = jsonToList(JSONArray.fromObject(allList).toString(),U.class); List<U> list2 = jsonToList(JSONArray.fromObject(smallList).toString(),U.class); Set<U> set = new HashSet<>(); set.addAll(list1); set.addAll(list2); for (U u :set){ System.out.println(u.getName()); } }
运行结果:
image.png
public static class U { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /**必须重写hashcode 和 equals 方法 */ @Override public int hashCode() { return name.hashCode(); // 重写此属性值的hashcode,不然就是判断这个对象的hashcode } @Override public boolean equals(Object obj) { if (obj instanceof U){ U o = (U)obj; if (o.getName().equals(name)){ //根据属性值进行判断 return true; } } return super.equals(obj); } }
/** * 将json数据转换成pojo对象list */ public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) { JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); try { List<T> list = MAPPER.readValue(jsonData, javaType); return list; } catch (Exception e) { e.printStackTrace(); } return null; }
Set<U> set1 = new HashSet<>(); Set<U> set2 = new HashSet<>(); set1.addAll(list1);//小王、小明 set2.addAll(list2);//小明、小哥 set2.retainAll(set1); //求交集 set1.addAll(set2); //求并集 set1.removeAll(set2); //求差集
作者:南京杨小兵
链接:https://www.jianshu.com/p/bbca829654cb
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦