Java HashMap: Key anhand von Value als Set<String> zurückgeben?
Moin,
folgender Fall:
private HashMap<String, String> storage = new HashMap<String, String>();
public void store(String item, String repository) {
if (repository == null || item == null) {
throw new NullPointerException();
}
if (repository == "" || item == "") {
throw new IllegalArgumentException();
}
storage.put(item, repository);
}
public Set<String> getItems(String repository) {
// Key: Glasses value: Bookshelf
// return null;
}
Aufgabe:
For the
getItems("Bookshelf");
the function should return the Set {"Glasses"}.
Irgendwelche Vorschläge? Meine Suche hat bisher kein hilfreiches Ergebnis vorgebracht.
2 Antworten
Vom Fragesteller als hilfreich ausgezeichnet
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
PC, Computer, Technik
Wieso iterierst du nicht einfach über die Einträge und stellst das Set selbst zusammen?
Set<String> keys = new HashSet<String>();
for (Entry<String, String> entry : yourMap.entrySet()) {
if (entry.getValue().equals(valueToCheck)) {
keys.add(entry.getKey());
}
}
PS.: Null-Checks könnten im obigen Snippet noch sinnvoll sein, werde ich an dieser Stelle aber nicht ergänzen.
![](https://images.gutefrage.net/media/user/LukaMc/1564011833666_nmmslarge__0_635_1242_1242_42550f0318bf6600e949d1dbab9acf89.png?v=1564011834000)
![](https://images.gutefrage.net/media/user/ralphdieter/1444750340_nmmslarge.jpg?v=1444750340000)
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer
Ohne groß zu überlegen:
import java.util.stream.Collectors;
// Return a set of all keys with value 'repository':
public Set<String> getItems(String repository) {
return storage.sentrySet().tream()
.filter(e -> e.getValue().equals(repository))
.map(e -> e.getKey())
.collect(Collectors.toSet());
}
Woher ich das weiß:Berufserfahrung
![](https://images.gutefrage.net/media/user/ralphdieter/1444750340_nmmslarge.jpg?v=1444750340000)