2016-10-05 88 views
2

我需要找到一個Integerweek其中配對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

'matchMap.values()'? – saka1029

回答

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(); 
+0

鍵是整數,而不是日期。 – saka1029

+0

@ saka1029謝謝,修正。 – shmosel

+0

確切需要什麼,謝謝! –