2

我有HashMap一些Keys - Values

在某些情况下,无论键如何,我都想将所有值更新为单个值。

是否有任何实用程序或预定义的方法可以做到这一点,没有 for 循环?

有什么建议么?

4

5 回答 5

17
if (yourCondition) { 
      for (Map.Entry<String, String> entry : map.entrySet()) {
          map.put(entry.getKey(), MY_VALUE);
      }
}

或者对于 java 8 或更高版本(没有循环)

if (yourCondition) { 
      map.replaceAll( (k,v)->v=MY_VALUE );
}
于 2013-05-16T13:30:09.833 回答
2

您可以在entrySet上使用迭代器:

Iterator it = yourMap.entrySet().iterator();
Map.Entry keyValue;
while (it.hasNext()) {
    keyValue = (Map.Entry)it.next();
    //Now you can have the keys and values and easily replace the values...
}

请注意,迭代器的内部实现仍然使用 for 循环 :)

于 2013-05-16T13:30:12.020 回答
1

尝试使用番石榴

Collections2.transform(stringStringHashMap.values(), new Function<String, String>() {
  @Override
  public String apply(java.lang.String s) {
    return "modified string";
  }
});
于 2013-05-16T13:32:37.747 回答
0

如果设置了某些条件,则扩展 HashMap 并使您的实现返回您的魔法值。

于 2013-05-16T13:30:02.797 回答
0

目前尚不清楚您打算如何将其设置为单个值,但您可以调用putAll如下答案HashMap所示:

Map tmp = new HashMap(patch);
tmp.keySet().removeAll(target.keySet());
target.putAll(tmp);

patchmap您要添加的target

patch可能是一个HashMap包含所有键的相同值的...。

于 2013-05-16T13:59:55.883 回答