当前位置: 首页 > 面试题库 >

用Java合并2个HashMap

韩恺
2023-03-14
问题内容

我有一个程序需要合并两个HashMap。哈希图的键为a
String,值为Integer。合并的特殊条件是,如果键已在字典中,则Integer需要将其添加到现有值中而不是替换它。这是我到目前为止抛出的代码NullPointerException

public void addDictionary(HashMap<String, Integer> incomingDictionary) {
        for (String key : incomingDictionary.keySet()) {
            if (totalDictionary.containsKey(key)) {
                Integer newValue = incomingDictionary.get(key) + totalDictionary.get(key);
                totalDictionary.put(key, newValue);
            } else {
                totalDictionary.put(key, incomingDictionary.get(key));
            }
        }
    }

问题答案:

如果您的代码不能保证incomingDictionary会在到达此方法之前将其初始化,则您将必须执行null检查,没有出路

public void addDictionary(HashMap<String, Integer> incomingDictionary) {
    if (incomingDictionary == null) {
        return; // or throw runtime exception
    }
    if (totalDictionary == null) {
        return;// or throw runtime exception
    }
    if (totalDictionary.isEmpty()) {
        totalDictionary.putAll(incomingDictionary);
    } else {
        for (Entry<String, Integer> incomingIter : incomingDictionary.entrySet()) {
            String incomingKey = incomingIter.getKey();
            Integer incomingValue = incomingIter.getValue();
            Integer totalValue = totalDictionary.get(incomingKey);
            // If total dictionary contains null for the incoming key it is
            // as good as replacing it with incoming value.
            Integer sum = (totalValue == null ? 
                                            incomingValue : incomingValue == null ? 
                                                    totalValue : totalValue + incomingValue
                          );
            totalDictionary.put(incomingKey, sum);
        }
    }
}

考虑到HashMap允许将null作为值在代码中容易发生NPE的另一个位置是

Integer newValue = incomingDictionary.get(key) + totalDictionary.get(key);

如果这两个都不为空,则将获得NPE。



 类似资料:
  • 当我现在运行我的脚本时,我得到了两个独立的窗口。一个窗口,让我们称之为“窗口A”,我的文本和输入框和一个空窗口,让我们称之为“窗口B”。 当我在“窗口A”中单击“运行”时,我的phyton脚本(在本例中为TennisMatchProbability.py)将被触发,该脚本的结果(TennisMatchProbability.py)将显示在“窗口B”中。 这是“tennismatchprobabil

  • 问题内容: 让我们看一个例子。 我需要合并这两个对象数组并创建以下数组: 有没有JavaScript或jQuery函数可以做到这一点? 不适合我 它返回 问题答案: 如果要在JavaScript中合并2个对象数组。你可以使用这一招 例如 输出:

  • 问题内容: 我在外壳程序脚本中使用jq工具(jq-json-processor)来解析json。 我有2个json文件, 想将它们合并为一个唯一的文件 这里是文件的内容: 文件1 文件2 预期结果 我尝试了很多组合,但是我得到的唯一结果是以下结果,这不是预期的结果: 使用此命令: 问题答案: 从1.4开始,操作员现在可以做到这一点。当给定两个对象时,它将递归合并它们。例如, 重要:请注意该标志,它

  • 我得合并两个DF。一个是我的主df,另一个有很多NaN 合并应该只是“忽略”NaN值,并且只在列值不是NaN的地方合并。我尝试了不同的方法,但是df2中的数据有几十种可能出现NaN值。df1有168K行,df2大约有170行,应该与任何与所有非NAN值匹配的相关联。有人知道如何有效地做到这一点吗? 经过对不同方法的广泛研究,似乎一个“神奇”的方式忽略NaNs可能是不存在的。我想在df2上应用一个掩

  • 问题内容: 我需要将2个多维数组合并在一起以创建一个新数组。 这两个数组是从和创建的,我需要将它们彼此关联。 数组#1 阵列#2 新阵列 我正在使用的当前代码有效,但仅适用于数组中的最后一项。 我想通过循环该函数在每个循环中擦除新数组。 我该如何纠正? 问题答案: []会将其附加到数组而不是覆盖。

  • 问题内容: 我有2个列表,每个列表大小相等,并且有兴趣将这两个列表合并并将其写入文件。 -结果列表应类似于[(1,2 ,,(2,3),(3,4),(5,5)] 之后,我希望将其写入文件。我怎样才能做到这一点? 问题答案: 文件中的结果输出为: