HashMap如果条件失败,我正在尝试将a中的所有值重置 为某个默认值.
目前我通过迭代所有键并单独重置值来完成此操作.
有没有可能的方法在没有迭代的情况下为所有键设置相同的值?
就像是:
hm.putAll("some val") //hm is hashmap object
Run Code Online (Sandbox Code Playgroud)
您无法避免迭代,但如果您使用的是java-8,则可以使用replaceAll将为您执行此操作的方法.
将指定的函数应用于此映射中的每个条目,将每个条目的值替换为使用当前条目的键和值调用函数的Function#map方法的结果.
m.replaceAll((k,v) -> yourDefaultValue);
Run Code Online (Sandbox Code Playgroud)
基本上,它遍历映射所保存的表的每个节点,并影响每个值的函数的返回值.
@Override
public void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
Node<K,V>[] tab;
if (function == null)
throw new NullPointerException();
if (size > 0 && (tab = table) != null) {
int mc = modCount;
for (int i = 0; i < tab.length; ++i) {
for (Node<K,V> e = tab[i]; e != null; e = e.next) {
e.value = function.apply(e.key, e.value); //<-- here
}
}
if (modCount != mc)
throw new ConcurrentModificationException();
}
}
Run Code Online (Sandbox Code Playgroud)
例:
public static void main (String[] args){
Map<String, Integer> m = new HashMap<>();
m.put("1",1);
m.put("2",2);
System.out.println(m);
m.replaceAll((k,v) -> null);
System.out.println(m);
}
Run Code Online (Sandbox Code Playgroud)
输出:
{1=1, 2=2}
{1=null, 2=null}
Run Code Online (Sandbox Code Playgroud)
你不能以某种方式避免迭代.
您可以通过Map.values()获取值并迭代这些值.您可以绕过按键查找,它可能是最有效的解决方案(虽然我怀疑通常可以节省相对较少的内容,也许这对您的代码的随意读者来说并不是最明显的)
| 归档时间: |
|
| 查看次数: |
4944 次 |
| 最近记录: |