【问题标题】:Nested null check in a map地图中的嵌套空检查
【发布时间】: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&lt;String,Object&gt; 是不可避免的,但是将其价值之一进一步转换为Map&lt;String, Map&lt;String, String&gt;&gt; 是一个太糟糕的选择。
  • @Naman 有什么更好的选择?因为它来自外部调用的 ,其中它的对象 cos 映射位于 Lists 和 Maps 和 Strings 的各种值中。而我知道我从该初始映射中提取的值是 Map>

标签: java dictionary if-statement java-8


【解决方案1】:

您是否希望:

Optional.ofNullable(map1)
        .map(e -> (Map<String, Map<String, String>>) e.get("key2"))
        .map(e -> e.get("key3"))
        .ifPresent(e->{
            // do something
        });

【讨论】:

    【解决方案2】:

    您可以使用以下链:

    Optional.ofNullable(map1)
        .map(m -> m.get("key2"))
        .map(m -> m.get("key3"))
        .ifPresent(el -> {
            // do something
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2020-04-01
      相关资源
      最近更新 更多