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); //求差集
网友评论