我正在使用自定义对象(例如Employee)作为键创建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;
}
简而言之,我期望就地实例化和赋值,同时将其作为值放置在地图中,而无需使用额外的方法。
答案 0 :(得分:2)
我同意deHaar的观点,简单地使用put
(有或没有便利方法)可能是您的最佳选择。但是,使用compute
方法可以很好地实现您所要求的:
myMap.compute("employee_key", (k, v) -> {
Employee e = new Employee();
e.setSalary(10000);
return e;
});
答案 1 :(得分:1)
希望在实例化值对象并设置类属性的值时将键值对put
变成Map
似乎几乎不可能实现或丑陋/不常见,至少。
我能想到的最短的(但不是就地)解决方案是实例化,setter和将对象放入Map
中,例如:
Map<String, Employee> myMap = new HashMap<>();
Employee employee = new Employee();
employee.setSalary(10000);
myMap.put("employee_key", employee);
这基本上是三班轮,甚至比不工作的lambda少了一行。