Erhalte den maximalen Schlüssel von MapK, V benutze Lambda

7

Ich habe Map<Float, String> und möchte das Maximum aller Schlüssel erhalten. In C # würde ich so etwas tun:

%Vor%

Jetzt suche ich nach einer Möglichkeit, dasselbe mit Java 8 lambdas zu machen, aber das nächste, was ich habe, ist:

%Vor%

Das sieht schrecklich aus und erfordert völlig unnötige Typumwandlungen. Gibt es einen besseren Weg, dies zu tun?

    
Jay 23.05.2014, 15:17
quelle

2 Antworten

13

Die Schnittstelle Stream enthält eine Methode max , um das maximale Element zu erhalten. Sie können einen Methodenverweis verwenden, um Comparator zu erstellen. Die Methode max gibt eine Optional<Float> zurück, weil es kein maximales Element gibt. Sie können die Methode orElse verwenden, um einen alternativen Wert für diesen Fall anzugeben.

%Vor%     
nosid 23.05.2014, 15:29
quelle
13

Es gibt eine direktere Lösung als die Funktion keySet (); Arbeiten Sie direkt mit dem entrySet (), indem Sie die Komparatorfactorys verwenden, die zu Map.Entry hinzugefügt wurden.

%Vor%

Dies erlaubt nicht nur, min / max-Elemente zu erhalten, sondern auch zu sortieren, so dass es einfach ist, die zehn wichtigsten Schlüssel / Wert-Paare wie folgt zu finden:

%Vor%     
Brian Goetz 23.05.2014 16:56
quelle

Tags und Links