java - 在 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;
}
简而言之,我期望在不使用额外方法的情况下将其作为值放入地图中进行适当的实例化和分配。
解决方案
我同意 deHaar 的观点,即简单地使用put
,无论是否使用便利方法,都可能是您的最佳选择。但是,使用以下方法可以很好地实现您所要求的compute
:
myMap.compute("employee_key", (k, v) -> {
Employee e = new Employee();
e.setSalary(10000);
return e;
});
推荐阅读
- java - 错误注入:org.apache.maven.plugin.war.WarMojo
- laravel - Instagram Graph API - 在生产模式下生成长寿命令牌的问题
- typescript - 如何在打字稿中使用中间件键入 redux thunk
- c - 你如何接受 execv 的参数 || execl 运行一个程序或管道另一个
- pandas - 我想创建一个新列,对另一列中的值进行分类,但在应用 lambda 后出现 ValueError
- laravel - Laravel Nova 在 newModel() 中创建一个带有动作的模型
- r - 用R中数据框中的最新数据填充缺失的日期
- c# - 命令:dotnet ef migrations add "Initial Application Migrations" 弹出这个奇怪的错误
- asp.net - 401 - 未经授权:由于凭据无效,访问被拒绝。您无权使用凭据查看此目录或页面
- r - pivot_wider() 为以前的完整数据生成 NA