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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
