【问题标题】:Map.compute function in javajava中的Map.compute函数
【发布时间】:2020-07-18 19:36:17
【问题描述】:
import java.util.*;

public class JavaApplication32 {
    public static void main(String args[]) {
        HashMap<String, String> map = new HashMap<>();
        map.put("Name", "Aman");
        map.put("Address", "Kolkata");
        map.compute("Name", (key, val) -> (val == null) ? "Gaurav" : val = "Great");
        System.out.println(map.get("Name"));
    }
}

以上代码显示错误。但是当值数据类型选择为int时,代码可以工作。

【问题讨论】:

  • 你想达到什么目的?错误说明了什么?请看How to Ask
  • 嗯.. 我知道错误是什么(val 是最终的?)但是您为什么不包括错误以及您对导致错误的原因的想法?

标签: java hashmap conditional-operator


【解决方案1】:

无需指定val

import java.util.*;

public class JavaApplication32 {

public static void main(String args[])
{
 HashMap<String, String> map = new HashMap<>(); 
 map.put("Name", "Aman"); 
 map.put("Address", "Kolkata"); 
 map.compute("Name", (key, val)  -> ( val==null) ? "Gaurav" : "Great"); 
 System.out.println(map.get("Name"));
}
}

【讨论】:

    【解决方案2】:

    替换

    map.compute("Name", (key, val)  -> ( val==null) ? "Gaurav" : val="Great"); 
    

    map.compute("Name", (key, val) -> (val == null) ? "Gaurav" : "Great");
    

    输出:

    Great
    

    解释: 三元运算符的语法如下:

    variable = condition ? value-if-condition-is-true : value-if-condition-is-false
    

    例如以下代码将x 的值分配给z

    int x = 10, y = 5, z;
    z = x > y ? x : y;
    System.out.println(z);
    

    但是,如果您想将左操作数保留在语句中,您可以使用() 来实现,如下所示:

    map.compute("Name", (key, val) -> (val == null) ? "Gaurav" : (val = "Great"));
    

    同样,

    z = x > y ? x : (z = y);
    

    即使上面给出的这两个语句将被成功编译,我建议你永远不要这样做,因为它只会让任何人通过你的代码感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多