java检查双嵌套 HashMap 中的键是否存在

标签 java

我有一个 HashMap 的双重嵌套 HashMap ,想检查键是否存在并放置新值。目前我正在嵌套 if 语句以检查每个级别的键是否存在。有没有更有效的编码方式?

HashMap<Foo1, HashMap<Foo2, HashMap<Foo3, Double>>> my_map = new HashMap<Foo1, HashMap<Foo2, HashMap<Foo3, Double>>>();

if (my_map.containsKey(foo1key)) {

    if (my_map.get(foo1key).containsKey(foo2key)) {

        if (my_map.get(foo1key).get(foo2key).containsKey(foo3key)) {

             return my_map.get(foo1key).get(foo2key).get(foo3key);
        }
    }
}

double foo3key = getValue();

// do the above steps again to put foo3key into map.

最佳答案

最有效的方法(假设您的值始终为非空)如下:

HashMap<Foo2, HashMap<Foo3, Double>> map2 = my_map.get(foo1Key);
if(map2!=null) {
  HashMap<Foo3, Double> map3 = map2.get(foo2Key);
  if (map3!=null) {
    Double value = map3.get(foo3Key);
    if (value!=null) {
      return (double)value;
    } else {
      // add value to map3, or whatever
    }
  }
}

这利用了以下技术:

  • 如果 get() 返回 null,您就知道该键不存在(因为不允许使用 null 值)
  • 保存上一次get的返回值,以便下次查找,这样就不需要链式get在一起了

虽然这有点困惑 - 如果您经常进行这种操作,那么我建议将其分解为一个单独的函数,这样您就可以:

double value = getNestedValue(my_map,foo1Key,foo2Key,foo3Key);

关于java检查双嵌套 HashMap 中的键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729597/

相关文章:

java - 更新数据库java

java - Java 库路径 Cloudera 中没有 Hadoop。提交 Java 作业时

java - 当我在 Android Studio 中运行我的应用程序时缺少返回语句

java - 如果 TTS 不支持卡纳达语,如何用卡纳达语播放文本

Java 7 无法从对象检索信息

java - 为什么 KeyStroke.getKeyStroke ('h' ).getKeyCode();返回0?

java - Jackson:一个类有两种不同的表示

java - @Inject 属性在 JSF 页面上显示为 "unknown property"

Java 通过 Servlet 连接到远程 MySQL 数据库

Java:如何确定类型是原始类型/包装器/字符串还是其他类型