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 Beitragsersteller als hilfreich ausgezeichnet
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.
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