【问题标题】:how to combine these two map conditions如何结合这两个地图条件
【发布时间】:2021-09-21 15:18:45
【问题描述】:

有没有办法将这两个条件组合到一个变量中?

boolean notNullMappingPresent1 = !isNullOrEmpty(map1) && (isNotNullOrEmpty(map1.get("Value"));
boolean nullMappingPresent1 = (!isNullOrEmpty(map1) && isNullOrEmpty(map1.get("Value")));

boolean notNullMappingPresent2 = !isNullOrEmpty(map2) && (isNotNullOrEmpty(map2.get("Value"));
boolean nullMappingPresent2 = (!isNullOrEmpty(map2) && isNullOrEmpty(map2.get("Value")));


if(notNullMappingPresent1){
    //lines of code
}
if(notNullMappingPresent2){
    //lines of code
}
if(nullMappingPresent1 && nullMappingPresent2){
    //lines of code
}

我需要结合 notNullMappingPresent1nullMappingPresent1 还结合 notNullMappingPresent2nullMappingPresent2。我们可以组合创建 2 个而不是创建 4 个布尔变量吗?

【问题讨论】:

  • 您能否详细描述一下,您要合并哪两个条件?
  • 结合 notNullMappingPresent1 和 nullMappingPresent1 也结合了 notNullMappingPresent2 和 nullMappingPresent2。我们可以组合创建 2 个而不是创建 4 个布尔变量吗?
  • 您的三个if 条件中的语句顺序是否相关?
  • 顺序不重要,但应检查这些条件

标签: java conditional-statements


【解决方案1】:

你可以像这样组合这两个变量:

if(!isNullOrEmpty(map1) && isNotNullOrEmpty(map1.get("Value")) && isNullOrEmpty(map1.get("Value"))) {
    // Line of code
}

if(!isNullOrEmpty(map2) && isNotNullOrEmpty(map2.get("Value")) && isNullOrEmpty(map2.get("Value"))) {
    // Line of Code
}

注意:上述条件不能一直匹配,因为第一个条件中的最后两个条件函数正好相反。

【讨论】:

  • 我不能将这 3 个检查与 && 结合起来,因为 if 条件就像上面所说的那样
【解决方案2】:

看来,map1map2 的空检查应该被提取出来,那么这两个表达式可以使用:

if (!isNullOrEmpty(map1) && !isNullOrEmpty(map2)) {
    boolean nullMapping1 = isNullOrEmpty(map1.get("Value"));
    boolean nullMapping2 = isNullOrEmpty(map2.get("Value"));

    if (nullMapping1 && nullMapping2) {
       // lines of code
    } else {
        if (!nullMapping1) {
            // lines of code
        }
        if (!nullMapping2) {
            // lines of code
        }
    }
}

【讨论】:

    【解决方案3】:

    让我们看看这段代码:

    boolean notNullMappingPresent1 = !isNullOrEmpty(map1) && (isNotNullOrEmpty(map1.get("Value"));
    boolean nullMappingPresent1 = (!isNullOrEmpty(map1) && isNullOrEmpty(map1.get("Value")));
    

    !isNullOrEmpty(map1) 等价于!isNullOrEmpty(map1)

    isNotNullOrEmpty(map1.get("Value")isNullOrEmpty(map1.get("Value")) 完全相反

    因此,为了简化这一点,让我们以更明智的方式重新表述:

    boolean map1NotEmpty = !isNullOrEmpty(map1); boolean map2NotEmpty = !isNullOrEmpty(map2); boolean map1Value = isNotNullOrEmpty(map1.get("Value")); boolean map2Value = isNotNullOrEmpty(map2.get("Value"));

    所以,你的逻辑应该是这样的:

    if (map1NotEmpty || map2NotEmpty) {
        if (map1NotEmpty && map1Value) {
            //...
        } else if (map1NotEmpty && map2Value) {
            //...
        } else if (map1NotEmpty && map2NotEmpty)
    }
    

    我仍然使用四个变量,是的,因为有四件事要知道:

    • map1 是空的吗?
    • map1 是否包含值?
    • map2 是空的吗?
    • map2 是否包含值?

    从技术上讲,我可以将所有这些组合成包含单个值的数字代码,但这太老套了,以至于无法在实际生活中使用它。

    【讨论】:

      【解决方案4】:

      我认为一种选择是使用 int 而不是 boolean,这样我们就可以有 3 个值并且可以检查所有条件:

      int mapCode1 = !isNullOrEmpty(map1)?(isNotNullOrEmpty(map1.get("Value1")))?1:0:-1;
      int mapCode2 = !isNullOrEmpty(map2)?(isNotNullOrEmpty(map2.get("Value2")))?1:0:-1;
      
      
      if(mapCode1==0 && mapCode2==0){
              System.out.println("Values of map1 and map2 are null");
          }
      if(mapCode1==1){
          System.out.println("Values of map1 are not null");
      }
      if(mapCode2==1){
          System.out.println("Values of map2 are not null");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 2019-04-05
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多