需要按 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());