Ich habe eine Methode geschrieben, die einen Namen von einem Feld nimmt und wenn es ein essentielles Feld ist, wird der Wert für das Feld berechnet und in die Karte für den Schlüssel gelegt.Wie implementiert man computeIfAbsent, um Objektwert zurückzugeben?
private final Map<String, Object> valuesMap = new HashMap<>();
private void saveValues(String name) {
if (dataStore.isEssentialField(name)) {
valuesMap.put(name, calculateValue(name));
}
}
Jetzt möchte ich folgendes erreichen: wenn bereits ein Wert mit dem „name“ oder die Taste zugeordnet ist, ist nicht „essentialField“, die Methode muss den vorhandenen Wert zurückgeben und nichts berechnen.
Ich nehme an, dass es mit computeIfAbsent
Methode einer Map-Schnittstelle erreicht werden kann, aber nicht sicher, wie man das korrekt implementiert. Wie sollte die Funktion in diesem Fall implementiert werden?
private Object saveValues(String name) {
if (dataStore.isEssentialField(name)) {
Object newValue = valuesMap.computeIfAbsent(name, -> (Function<? super String, ?>) calculateValue(name));
}
return .... ? // How can the existing value be returned here?
}
Es ist ein Loch in der Anforderung „, wenn bereits ein Wert Wenn der Schlüssel "Name" zugeordnet ist oder der Schlüssel nicht "essentialField" ist, muss die Methode den vorhandenen Wert zurückgeben ". Was ist, wenn der Schlüssel nicht wichtig ist und kein Wert vorhanden ist? – GPI
'return datastore.get (Name);' – Lino
@GPI wahrscheinlich die einzige Option in der Situation, wenn der Schlüssel nicht wichtig ist und es keinen vorhandenen Wert gibt, ist die Rückgabe von 'null'. – samba