【问题标题】:Improve if statement in Loop through Hashmap通过Hashmap改进循环中的if语句
【发布时间】:2020-02-10 10:22:00
【问题描述】:

我创建了一个循环,通过我的HashMap。然后我检查当前键的名称 (A) 是否等于可能添加的键 (B)。密钥 A 和密钥 B 的哈希码在名称相同时不一定相等。因此,我通过将它们转换为字符串(覆盖 .equals())来检查它们是否相等。代码可以正常工作,但大多数情况下都有一种更简洁、更简单的方法。

这是我当前的代码:

for (HashMap.Entry<Identifier, SetInterface<BigInteger>> entry : idAndSet.entrySet()) {
    if (entry.getKey().isEqual(identifier)) {
        factor = entry.getValue();
        return factor;
    }  
}

【问题讨论】:

标签: java for-loop if-statement hashmap key


【解决方案1】:

key A 和 key B 的哈希码在名字相同时不一定相等。

这不是一个好主意。任何作为键的类都应该覆盖 equals 和 hashCode。并且最好使该类也不可变(否则您最终可能会遇到一些困难的调试)。

一旦你这样做了,你就可以这样做


   Map<Indentifer, Object> map...;
   Object value = map.get(id);

   // or as of Java 8+

   Object value = map.getorDefault(id, someDefaultValue);

【讨论】:

    【解决方案2】:

    您可能会误用Map.computeIfPresent 方法。

    factor = map.computeIfPresent(identifier, (k,v) -> v);
    return factor;
    

    该方法返回与指定键关联的值,如果没有则返回null

    【讨论】:

      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2018-04-28
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多