Ich habe eine Hash-Map mit den folgenden Werten, in Werten, die ich als String-Datentyp datiert habe. Ich möchte alle Daten vergleichen, die in der Karte verfügbar sind, und nur einen Schlüsselwert extrahieren, der ein sehr aktuelles Datum hat.
Ich möchte mit Werten vergleichen, nicht mit Schlüsseln.
Ich habe den folgenden Code eingefügt
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "1999-01-01");
map.put("2", "2013-10-11");
map.put("3", "2011-02-20");
map.put("4", "2014-09-09");
map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v));
}
}
Die erwartete Ausgabe für diese ist:
Schlüssel 4 Wert 2014-09-09
LocalDate
Objekte. Der Rest des Codes wird wahrscheinlich der gleiche sein, außer der Deklaration des Kartentyps.Antworten:
Dies sollte das neueste (auch bekannt als das größte) Datum im Vergleich zu den anderen liefern.
Wenn Sie auch den Schlüssel möchten, tun Sie dies und geben Sie einen Map.Entry zurück. Benötigt Java 9+
Dies setzt voraus, dass Ihre Karte nicht leer ist. Wenn es leer ist, gibt es eine Null zurück. Funktioniert mit Java 8+
quelle
Verwenden Sie Collections.max mit entrySet
oder
quelle
Map.Entry.comparingByValue()
ist geschickt (seit Java 8).Auf den ersten Blick ist die Verwendung von String-Literalen zur Darstellung von Datum kein guter Ansatz und macht es anfälliger und fehleranfälliger. Sie würden lieber
LocalDate
in erster Linie verwenden. Unter der Annahme, dass Sie keine Kontrolle über dieses Datenformat haben (z. B. von einem anderen System eines Drittanbieters), können wir dennoch einen Ansatz entwickeln, der das vorliegende Problem löst. So sieht es aus.Mit
LocalDate.parse
wird die Zeichenfolgendarstellung des Datums inLocalDate
eine vergleichbare Darstellung konvertiert . DasComparable
wird dann als Schlüssel zurComparator
Bauweise übergeben. Und hier ist das Ausgabe-Schlüssel-Wert-Paar bei erfolgreicher Ausführung:Wenn Sie lediglich auf die oben vorgeschlagene Zeichenfolgendarstellung des Datums verzichten können, können Sie die obige Lösung viel einfacher und prägnanter gestalten.
quelle
Das sollte funktionieren
Ausgabe ist
Optional[4=2014-09-09]
quelle
Sie können die Zeichenfolge analysieren
LocalDate
und in umgekehrter Reihenfolge sortierenquelle
Sie können entweder:
oder :
Beide führen zum gleichen Ergebnis.
quelle
Map.Entry.comparingByValue()
ist geschickt (seit Java 8).