有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算如果存在映射

import java.util.Map;

public class Example {

    private static Map<String, Integer> map = Map.of("Ciao", 5, "Luca", 10, "Marco", 50);
    private static final String NEW_KEY = "New key";

    public static void main(final String[] args) {
        map.computeIfPresent("Ciao", (k, v) -> {
            map.remove("Ciao");
            map.put(NEW_KEY, 10);
            return v;
        });
    }
}

当我不想返回v时,为什么我必须在computefpresent中返回v?如果不使用k和v,我可以不通过它们吗


共 (2) 个答案

  1. # 1 楼答案

    您没有按预期使用computeIfPresent,并且(在没有测试的情况下)您的代码很可能无法工作。特别地,Javadoc声明Map应该而不是在回调函数中被修改。如果要用另一个键/值对替换一个键/值,则应使用if

    if (map.containsKey("Ciao")) {
        map.remove("Ciao");
        map.put(NEW_KEY, 10);
    }
    
  2. # 2 楼答案

    computeIfPresent用于处理同一密钥的冲突。就你而言,我想你可以这么做

    if (map.remove("Ciao") != null) {
      map.put(NEW_KEY, 10);
    }
    

    只有当您的映射是可变的并且不将null作为值时,这才有效。您的映射不仅是空安全的,而且是不可变的