J'ai une carte de hachage avec des valeurs ci-dessous, dans les valeurs que j'ai la date comme type de données de chaîne. Je voudrais comparer toutes les dates qui sont disponibles dans la carte et extraire une seule valeur-clé qui a une date très récente.
Je voudrais comparer avec des valeurs et non des clés.
J'ai inclus le code ci-dessous
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));
}
}
La sortie attendue pour celui-ci est:
Valeur clé 4 2014-09-09
LocalDate
objets. Le reste du code sera probablement le même, sauf la déclaration du type de la carte.Réponses:
Cela devrait fournir la date la plus récente (ou la plus grande) par rapport aux autres.
Si vous souhaitez également la clé, faites-le et renvoyez un Map.Entry. Nécessite Java 9+
Cela suppose que votre carte n'est pas vide. s'il est vide, il renvoie une valeur nulle. Fonctionne avec Java 8+
la source
Utiliser Collections.max avec entrySet
ou
la source
Map.Entry.comparingByValue()
est astucieux (depuis Java 8).À première vue, l'utilisation de littéraux de chaîne pour représenter la date n'est pas une bonne approche et la rend plus fragile et sujette aux erreurs. Vous préférez utiliser
LocalDate
en premier lieu. Cependant, en supposant que vous n'avez aucun contrôle sur ce format de données (par exemple, il provient d'un autre système tiers), nous pouvons toujours concevoir une approche qui résout le problème actuel. Voici à quoi ça ressemble.Le
LocalDate.parse
est utilisé pour convertir la représentation sous forme de chaîne de la date en unLocalDate
qui est un comparable. CelaComparable
est ensuite transmis comme clé de laComparator
méthode de construction. Et voici la paire clé-valeur de sortie lors de l'exécution réussie:Si vous pouvez simplement vous passer de la représentation String de la date comme suggéré ci-dessus, vous pouvez rendre la solution ci-dessus beaucoup plus simple et succincte.
la source
Cela devrait fonctionner
la sortie est
Optional[4=2014-09-09]
la source
Vous pouvez analyser la chaîne
LocalDate
et la trier dans l'ordre inversela source
Vous pouvez faire soit:
ou :
Les deux produiront le même résultat.
la source
Map.Entry.comparingByValue()
est astucieux (depuis Java 8).