Lambda-Ausdrücken in java 8 (Null-check in HashMap mit java.util.Optional)
Ich bin neu in java 8 und lernen lambda-Ausdruck.
Habe ich eine Schnittstelle.
Configuration.java
package com.raghu.example;
import java.util.Map;
public interface Configuration {
public Map<String,String> getPayload();
}
Impl Schnittstelle: ConfigurationImpl.java
package com.raghu.example;
import java.util.HashMap;
import java.util.Map;
public class ConfigurationImpl implements Configuration {
@Override
public Map<String, String> getPayload() {
Map<String,String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
//return null;
return map;
}
}
Mein Main Programm : Sample.java
package com.raghu.example;
import java.util.Optional;
public class Sample {
Configuration config;
/*
* if config is null, return "";
* if config.getPaylaod is null, return "";
* if config.payload is not null and if key value is present, then return the value
* if config.payload is not null and if invalid key, then return "";
*
*/
String test(String key) {
config = new ConfigurationImpl();
String dataValue = "";
/** java 7
if (StringUtils.isNotEmpty(key)) {
try {
String input= config.getPayload()==null?"":config.getPayloadmap().get(key);
return (input!=null?input:"");
} catch (Exception e) {
return "";
}
}
return "";
}**/
Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);});
// //cdataValue=str;});
// //Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);return str;});
return dataValue;
}
public static void main(String[] args) {
Sample s = new Sample();
String value="";
value=s.test("key"); //pass invalid , should return "";
System.out.println(value);
value=s.test("key1"); //pass invalid , should return actual value
System.out.println(value);
}
}
Nun in der Methode test, ich will im folgenden[""].
- Prüfen, ob die config ist null, Rückgabe leerer String.
- Prüfen, ob die Sammlung ist null, Rückgabe leerer string.
- Wenn die Erhebung nicht null ist, und wenn der Schlüssel vorhanden ist, dann den Rückgabewert else return "";
Wie man dies in java 8?
So probiert:
-
Fehler 1:Void methods cannot return a value
Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);return str;});
-
Fehler 2: Lokale variable dataValue definiert, die in einem umschließenden scope muss endgültig sein, oder effektiv final.
Optional.ofNullable(config).map(Configuration::getPayload).ifPresent(v->{final String str=v.get(key);System.out.println(str);dataValue= str;});
Hinzufügen endgültig nicht lösen.
Veröffentlicht die java-7-code und die ich zu lösen versuche die if-else-Teil von java 7 mit lambda-Ausdruck.
InformationsquelleAutor Raghu | 2015-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur halten, auf die Verkettung
.map(...)
. Wenn die null passiert bei jedem der Schritte, wird es nur machen, die ganze Sache in eine leereOptional
und dannorElse("")
Standardwert zurück.c->c.get(key)
ersetzt werden kann, mitMap::get(key)
🙂hat bei mir nicht funktioniert.. zurückliefern.ofNullable(config) .Karte(Konfiguration::getPayload) .Karte(Map::get(key)) .orElse(""); bin ich hier etwas fehlt?
Ich glaube nicht, dass es so etwas wie
Map::get(key)
. Methode Referenzen nicht nehmen Argumente.es ist Umgekehrt: es gibt keinen Grund zu unterstützen, eine zweite syntax, um etwas auszudrücken.
c->c.get(key)
perfekt beschreibt die operation.InformationsquelleAutor Misha