Wenn ich den Wert "foo"
habe und eine HashMap ftw
, für die ftw.containsValue("foo")
true
zurückgibt, wie kann ich den entsprechenden Schlüssel erhalten? Muss ich durch die HashMap schleifen? Wie ist der beste Weg, das zu tun?
Antworten
Zu viele Anzeigen?
Kaplan
Punkte
1226
lambda ohne Verwendung externer Bibliotheken
kann mit mehreren Werten für einen Schlüssel umgehen (im Unterschied zum BidiMap)
public static List getKeysByValue(Map map, String value) {
List list = map.keySet().stream()
.collect(groupingBy(k -> map.get(k))).get(value);
return (list == null ? Collections.emptyList() : list);
}
erhält eine List
die den/die Schlüssel
enthält, die value
zugeordnet sind
für eine 1:1-Zuordnung ist die zurückgegebene Liste leer
oder enthält 1 value
smftr
Punkte
843
Lassen Sie mein Beispiel sehen
Map mapPeopleAndCountry = new HashMap<>();
mapPeopleAndCountry.put("Matis", "Litauen");
mapPeopleAndCountry.put("Carlos", "Honduras");
mapPeopleAndCountry.put("Teboho", "Lesotho");
mapPeopleAndCountry.put("Marielos", "Honduras");
List peopleInHonduras = mapPeopleAndCountry.keySet()
.stream()
.filter(r -> mapPeopleAndCountry.get(r)
.equals("Honduras"))
.stream(Collectors.toList());
// gibt ["Carlos", "Marielos"] zurück
Hinweis: nicht getestet, können Tippfehler enthalten
Sreedhar GS
Punkte
2530
Jasur Hakim
Punkte
1
- See previous answers
- Weitere Antworten anzeigen