当前位置: 首页 > 知识库问答 >
问题:

Java8基于Map属性筛选Map对象列表以删除一些重复项

陆承宣
2023-03-14
List<Map<String, Object>> allPoints = new LinkedList<>();
 List<Map<String, Object>> expectedPoints

名单中有重名的;对于这些,只想保留最后一个。

例如。如果列表有三个项目,并且第一个和第三个项目都有值为“abc”的“name”,那么结果列表应该只包含来自原始列表的第二个和第三个项目。

共有1个答案

郑茂勋
2023-03-14

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

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要么将新条目放入映射,要么用新条目覆盖现有条目的值,从而只保留与名称关联的最后一点。

我正在使用其重载构造函数创建一个访问排序的LinkedHashMap。这是为了维护与allpoints列表中相同的顺序。

 类似资料: