ppb*_*ppb 13 java dictionary optional java-8
让我们考虑一下 HashMap
HashMap<String, String> map = new HashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
我在地图中有值
map.put("model", "test");
Run Code Online (Sandbox Code Playgroud)
目前,如果我想从我正在做的地图中获取价值
if(map!=null){
if(map.get("model")!=null && !map.get("model").isEmpty()){
//some logic
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用Optional或Lambdas来实现上述条件,Java 8中是否有更好的方法?
JB *_*zet 12
首先,您的地图不应为空.决不.它可能是空的,但没有理由它为空.这样就消除了第一次空检查.
现在,遗憾的是,Java没有这样的实用方法,但是几个常用的库(apache commons,Guava等)都有它,或者你可以自己编写它,所以它变成了:
String model = map.get("model");
if (!Strings.isEmptyOrNull(model)) {
// do somthing
}
Run Code Online (Sandbox Code Playgroud)
使用Optional将可空值包装为逻辑的一部分被视为反模式.可选项旨在用作返回类型.所以我不建议在这里使用它.
还要注意,感觉就像使用地图来存储对象的属性如果是这样,那么考虑使用类型属性来定义真实类,而不是使用地图.
不确定为什么要检查地图是否为空,但是这里是:
Optional.ofNullable(map)
.map(m -> m.getOrDefault("model", "")) // Use an empty String if not present
.filter(s -> !s.isEmpty()) // Filter all empty values
.ifPresent(valueString -> { // Check if value is present
// Logic here
});
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
Optional.ofNullable(map).map(m -> m.getOrDefault("model", "")).filter(s -> !s.isEmpty()).ifPresent(valueString -> {
// Logic here
});
Run Code Online (Sandbox Code Playgroud)
更改ifPresent到map,如果你想返回的东西; 即可选择你计算的任何东西.