当前位置: 首页 > 知识库问答 >
问题:

什么是最干净的方法来组织if/ett块来分配来自多个潜在数据源的变量?

徐焱
2023-03-14

如果数据集返回null或为空,那么按顺序分配变量的最干净方法是什么?我在Java工作。

伪代码:

我知道。包含地图存在的;我使用的真正代码不是地图,但这应该是一个不错的例子。

Object variable = firstmap.get(key);
if (variable == null) {
  variable = secondmap.get(key);
  if (variable == null) {
    variable = thirdmap.get(key);
    if (variable == null) {
      ...
    }
  }
}

我可以这样分解,当然,但看起来还是不太好:

Object variable = firstmap.get(key);
if (variable == null) {
  variable = secondmap.get(key);
}
if (variable == null) {
  variable = thirdmap.get(key);
}
if (variable == null) {
  ...
}
...

有没有更干净的方法?有真正的大脑打嗝。

共有2个答案

洪宏硕
2023-03-14

你可以试试这个:

Object variable;
boolean found =
    (variable = firstmap.get(key)) != null ||
    (variable = secondmap.get(key)) != null ||
    (variable = thirdmap.get(key)) != null ||
    ...
    (variable = nthmap.get(key)) != null;

因为| |短路,它只会检查地图,直到找到第一个包含密钥的地图。

莘绍元
2023-03-14

你正在做的被称为“合并”。你可以尝试这样的事情:

public <T> T coalesce(T ... values) {
    for (T value : values) {
      if (value != null) {
         return value;
      }
    return null;
}

并将变量设置为

variable = coalesce(firstMap.get(key), secondMap.get(key), thirdMap.get(key));
 类似资料:
  • 问题内容: 一个没有stopServer功能的RMI服务器,可以正常工作。 每当被调用异常中的stopServer()抛出时 这是堆栈跟踪 即使我使用清理服务对象,情况也一样 有人可以提出一种干净的方法来停止服务器,这还会释放端口以供重用。 问题答案: 您需要存储结果并取消导出结果。目前,您正在尝试取消导出存根。

  • 本文向大家介绍webpack用来干什么的?相关面试题,主要包含被问及webpack用来干什么的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将

  • 问题内容: 主管的指示:“我要避免在其中添加任何逻辑models.py。从现在开始,让我们将其用作访问数据库的类,并将所有逻辑保留在使用模型类或包装它们的外部类中。” 我觉得这是错误的方法。我觉得将逻辑排除在模型之外只是为了减小文件大小是一个坏主意。如果逻辑在模型中是最好的,那么无论文件大小如何,它实际上都是应该去的地方。 那么有没有一种简单的方法可以只使用include?用PHP讲,我想向主管建

  • 我和我的同事面临一个问题。我们有几个SQL查询作为字符串。下面是一个例子: 目前,我们将它们作为字符串从查询类中的方法返回。我们希望重构代码,使其干净,因为我们有一个方法有3个以上的参数,这是很难使用的任何方式。 你会怎么做?组织需要大量参数的SQL查询的最干净的方法是什么?我非常感谢任何可能改善我们代码当前状态的答案。 谢谢

  • 为了与网络通信,我使用JAVA SDK V1.4.1。我能够注册,创建高频客户机和渠道等,也能够创建用户和查询(读取)区块链没有任何问题。 我面临的问题是当试图使用'invoke'函数更新区块链时。 下面是我在JAVA端看到的stacktrace 我有几个问题 如果交易的有效性仅仅通过在通道初始化中添加所需的背书对等方来实现,那么实施背书规则的意义何在?如果org1设法获得了org2的对等详细信息

  • 我有一些简单的枚举名:失败/成功的结果 我有一个函数,它什么也没有得到,但返回未来的结果, 我不喜欢我的解决方案,它看起来很凌乱,有更简单的吗? 返回 我想在这里做的是,如果返回None,那么func应该返回Future[Fail],否则调用db,这也返回一个case类的未来,并基于响应返回Fail/Success。 但我正在寻找一种超级时尚的斯卡拉方式,让它看起来不错:) 谢谢