2016-10-05 2 views
2

Ich muss eine Integerweek finden, die gepaart Date ist das nächste Datum der aktuellen Zeitstempel.Implement Vergleich gegen Map-Werte

Mit anderen Worten: ein Date auszuführen vergleichen gegen Werte in 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); 
     } 

Nächster Schnipsel findet das am nächsten Tag auf den aktuellen Zeitstempel:

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)); 
     } 
); 

Was in MAP_VALUE param sollten sein Können Sie dann das Ziel erreichen?

+0

'matchMap.values ​​()'? – saka1029

Antwort

2

Wenn ich Sie richtig verstehe, wollen Sie den Schlüssel, der dem niedrigsten Wert entspricht, wie von Ihrem Vergleicher bestimmt. Wenn ja, können Sie den Mindesteintrag in der Karte finden und den Schlüssel extrahieren:

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

Schlüssel ist Ganzzahl, nicht Datum. – saka1029

+0

@ saka1029 Danke, behoben. – shmosel

+0

Genau was benötigt wurde, danke! –

Verwandte Themen