public static void main(String[] args) {//需求:根据List> 的map中name 属性相同去重/以下为造数据/
//创建数据,对根据姓名 name 去重
List> allList = new ArrayList<>();
List> smallList = new ArrayList<>(); Map map1 = new HashMap<>();
map1.put("id",2019);
map1.put("name","小明");
map1.put("id",2017);
map1.put("name","小王"); Map 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 list1 = jsonToList(JSONArray.fromObject(allList).toString(),U.class);
List list2 = jsonToList(JSONArray.fromObject(smallList).toString(),U.class); Set set = new HashSet<>();
set.addAll(list1);
set.addAll(list2); for (U u :set){
System.out.println(u.getName());
}
}
运行结果:
image.pngpublic 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 List jsonToList(String jsonData, Class beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); try { List list = MAPPER.readValue(jsonData, javaType); return list;
} catch (Exception e) {
e.printStackTrace();
} return null;
}Set set1 = new HashSet<>(); Set set2 = new HashSet<>();
set1.addAll(list1);//小王、小明
set2.addAll(list2);//小明、小哥
set2.retainAll(set1); //求交集
set1.addAll(set2); //求并集
set1.removeAll(set2); //求差集
作者:南京杨小兵
链接:https://www.jianshu.com/p/bbca829654cb
打开App,阅读手记