首页 > 解决方案 > 在 hashmap 中,使用就地对象实例化设置自定义对象值

问题描述

我正在创建一个以自定义对象(比如员工)为键的 HashMap。 我对 Employee 类没有修改权限。 Employee 对象没有 args 构造函数说Map<String, Employee> empMap是我的地图对象。如何在适当位置实例化对象并设置值并将其放入地图中。

Map<String, Employee> mymap = new HashMap<>();
myMap.put("employee_key", () -> {
    Employee e = new Employee();
    e.setSalary(10000);
    return e;
});

这显示错误: lambda 转换的目标类型必须是接口。

不想做的事情:

myMap.put("employee_key", getEmployee(1000));
private Employee getEmployee(int salary){
    Employee e = new Employee();
    e.setSalary(salary);
    return e;
}

简而言之,我期望在不使用额外方法的情况下将其作为值放入地图中进行适当的实例化和分配。

标签: javajava-8hashmap

解决方案


我同意 deHaar 的观点,即简单地使用put,无论是否使用便利方法,都可能是您的最佳选择。但是,使用以下方法可以很好地实现您所要求的compute

myMap.compute("employee_key", (k, v) -> {
    Employee e = new Employee();
    e.setSalary(10000);
    return e;
});

推荐阅读