加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8过滤器基于Map属性的Map对象列表,用于删除一些重复项

发布时间:2020-12-15 08:25:29 所属栏目:Java 来源:网络整理
导读:有一个 ListMapString,Object allPoints = new LinkedList(); 每个映射都包含一个带有String值的“name”键; 需要创建一个 ListMapString,Object expectedPoints 列表中有重复的名称;对于这些,只想保留最后一个. 例如.如果列表有三个项目,并且第一个和第三个
有一个

List<Map<String,Object>> allPoints = new LinkedList<>();

每个映射都包含一个带有String值的“name”键;
需要创建一个

List<Map<String,Object>> expectedPoints

列表中有重复的名称;对于这些,只想保留最后一个.

例如.如果列表有三个项目,并且第一个和第三个项目都具有值为“abc”的“name”,则结果列表应仅包含原始列表中的第二个和第三个项目.

解决方法

一种方法是使用辅助地图:

Map<String,Map<String,Object>> map = new LinkedHashMap<>(allPoints.size(),0.75f,true);
allPoints.forEach(point -> map.put((String)point.get("name"),point));

List<Map<String,Object>> expectedPoints = new ArrayList<>(map.values());

这是有效的,因为Map.put要么将新条目放入地图,要么用新的条目覆盖现有条目的值,从而仅保留与名称关联的最后一个点.

我正在使用其overloaded constructor创建一个访问顺序的LinkedHashMap.这是为了保持与allPoints列表中相同的顺序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读