我需要找到Integer
week
,其中配对Date
是与当前时间戳最接近的日期。
换句话说,与matchMap
中的值进行日期比较:
Map<Integer, Date> matchMap = null;
for (MatchSummary match : matchList) {
String str_date = match.getDate();
Date matchDate = null;
try {
matchDate = new SimpleDateFormat("yyyy-MMM-dd'T'HH:mm:ss.SSS'Z'" , Locale.getDefault()).parse(str_date);
} catch (java.text.ParseException e) { e.printStackTrace(); }
matchMap.put(match.getWeek(),matchDate);
}
下一个代码段找到与当前时间戳最接近的日期:
final long now = System.currentTimeMillis();
Date closest = Collections.min(MAP_VALUE, new Comparator<Date>() {
public int compare(Date d1, Date d2) {
long diff1 = Math.abs(d1.getTime() - now);
long diff2 = Math.abs(d2.getTime() - now);
return Long.valueOf(diff1).compareTo(Long.valueOf(diff2));
}
);
MAP_VALUE
param应该有什么能够达到目标?
答案 0 :(得分:2)
如果我理解正确,您需要与比较器确定的最低值对应的键。如果是这样,您可以在地图中找到最小条目并提取密钥:
final long now = System.currentTimeMillis();
Integer closest = Collections.min(matchMap.entrySet(), new Comparator<Map.Entry<Integer, Date>>() {
@Override
public int compare(Map.Entry<Integer, Date> e1, Map.Entry<Integer, Date> e2) {
long diff1 = Math.abs(e1.getValue().getTime() - now);
long diff2 = Math.abs(e2.getValue().getTime() - now);
return Long.compare(diff1, diff2);
}
}).getKey();