【发布时间】:2020-03-11 23:53:27
【问题描述】:
我正在从外部服务(具有嵌套地图)中提取地图值。
我想获得一个嵌套在该地图中几个级别的值并执行一些操作。
以下工作,但有没有更好的方法来做到这一点?
我正在尝试使用Optional,但我认为在这种情况下这是不可能的,因为我无法传递方法引用,如下所示:
Optional.ofNullable(map1)
.map(Map::get)
......
以下是我尝试使用 Optional 或任何其他建议进行修改的工作示例。请指教。
import org.apache.commons.collections.MapUtils;
public class A{
private void methodA(){
Map<String,Object> map1 = getMap(); // getMap() can return null
if(MapUtils.isNotEmpty(map1)){
Map<String, Map<String, String>> map2 = (Map<String, Map<String, String>>) map1.get("key2");
if(MapUtils.isNotEmpty(map2)){
Map<String, String> map3 = map2.get("key3");
if(MapUtils.isNotEmpty(map3)){
// do something
}
}
}
}
这是我找到的最接近的答案,但与地图中的地图中的嵌套地图无关。 Java 8 nested null check for a string in a map in a list
【问题讨论】:
-
这一切的根本原因 - “getMap() 可以返回 null”。解决这个问题!我可以支持这样一个事实,即有时使用
Map<String,Object>是不可避免的,但是将其价值之一进一步转换为Map<String, Map<String, String>>是一个太糟糕的选择。 -
@Naman 有什么更好的选择?因为它来自外部调用的
,其中它的对象 cos 映射位于 Lists 和 Maps 和 Strings 的各种值中。而我知道我从该初始映射中提取的值是 Map >
标签: java dictionary if-statement java-8