过滤数组基于日期值的哈希映射列表



需要按 id 过滤重复值,以保持具有最新时间戳的记录。

下面是代码:

HashMap<String, Object> sampleMap = new HashMap<String, Object>();      
sampleMap.put("Name", "Ronaldo");
sampleMap.put("Playerid", "11");
sampleMap.put("Date", "2020-05-01T08:35:42-04:00");
HashMap<String, Object> sampleMap1 = new HashMap<String, Object>();     
sampleMap1.put("Name", "Messi");
sampleMap1.put("Playerid", "12");
sampleMap1.put("Date", "2020-06-01T08:35:42-04:00");
HashMap<String, Object> sampleMap2 = new HashMap<String, Object>();     
sampleMap2.put("Name", "Messi");
sampleMap2.put("Playerid", "12");
sampleMap2.put("Date", "2020-05-01T08:35:42-04:00");
ArrayList<HashMap<String, Object>> fMap = new ArrayList<HashMap<String, Object>>();
fMap.add(sampleMap);
fMap.add(sampleMap1);
fMap.add(sampleMap2);

预期成果 :

fmap[sampleMap, sampleMap1]

最终输出应该只有sampleMap,sampleMap1,因为sampleMap1和sampleMap2具有相同的playerId,但sampleMap1的日期是最新的,因此它应该没有sampleMap2。

找不到解决此案的逻辑。请帮帮我

如果要对地图列表进行排序。您可以使用Java 8的功能,即Stream API。比较器通常用于排序。您可以选择要按Comparator.comparing(map ->map.get("field"((排序的字段。为了删除重复值,流 API 表示 distinct(( 函数。

您的玩家列表可以按如下方式排序:

fMap.stream()
.sorted(Comparator.comparing(map -> Integer.parseInt((String)map.get("Playerid")))
.thenComparing(map -> LocalDate.parse((String)map.get("Date"), 
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.ENGLISH))))
.distinct()
.collect(Collectors.toList());

最新更新