Java 8filter基于Map属性的Map对象列表,用于删除一些重复项
有一个
List<Map> allPoints = new LinkedList();
每个映射都包含一个带有String值的"name"
键; 需要创建一个
List<Map> expectedPoints
列表中有重复的名称; 对于这些,只想保留最后一个。
例如,如果列表有三个项目,并且第一个和第三个项目都具有值为“abc”的“name”,则结果列表应仅包含原始列表中的第二个和第三个项目。
一种方法是使用辅助地图:
Map> map = new LinkedHashMap<>(allPoints.size(), 0.75f, true); allPoints.forEach(point -> map.put((String)point.get("name"), point)); List
这是有效的,因为Map.put
要么将新条目放入Map.put
要么使用新条目覆盖现有条目的值,从而仅保留与名称关联的最后一个点。
我正在使用其重载的构造函数创建一个访问顺序的 LinkedHashMap
。 这是为了保持与allPoints
列表中相同的顺序。
如果您对一个或多个键值对有约束并且灵活使用Set,请编写您自己的Comparator并在LinkedList
上使用descendingIterator
并写入TreeSet
。 见下面的代码:
LinkedList