我有一个带有值的Map,我想把这个值Map到dto
除了使用if-else条件和Map到dto对象之外,还有更好的方法吗
这是我的密码
public class Test {
public static void main(String[] args) {
HashMap<String , Object> hashMap = new HashMap<String , Object>();
hashMap.put("empName", "Pavan");
hashMap.put("deptNO", "12");
hashMap.put("country", "IND");
hashMap.put("age", "34");
// TODO Auto-generated method stub
Set<String> keys = hashMap.keySet();
for(String key: keys){
Employee emp = new Employee();
if(key.equals("empName"))
emp.setName(hashMap.get("empName"))
}
}
}
public class Employee {
private String empName ;
private String deptNO ;
private String country ;
private String age ;
// setters and getters
}
我知道传统的做事方式
for(String key: keys){
Employee emp = new Employee();
if(key.equals("empName"))
emp.setName(hashMap.get("empName"))
}
有没有更好的办法?
3条答案
按热度按时间hfyxw5xn1#
可以为employee类设置参数化构造函数
您可以从Map创建employee对象。
编辑:如果map中有许多字段,可以使用employee类中的hashmap来获取现有属性。
ryhaxcpt2#
您可以使用beanutils.populate将hashmap键复制到bean,下面是一个示例:
输出
阅读更多信息:
https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/beanutils.html
https://www.tutorialspoint.com/java_beanutils/data_type_conversions_beanutils_and_convertutils.htm
gg0vcinb3#
使用mapstruct的方法-
定义了一个接口
EmployeeMapper
```@Mapper
public interface EmployeeMapper {
EmployeeMapper MAPPER = Mappers.getMapper(EmployeeMapper.class);
@Mapping(expression = "java(parameters.get("empName"))", target = "empName")
@Mapping(expression = "java(parameters.get("deptNO"))", target = "deptNO")
@Mapping(expression = "java(parameters.get("country"))", target = "country")
@Mapping(expression = "java(parameters.get("age"))", target = "age")
Employee map(final Map<String, String> parameters);
}
Employee employee = EmployeeMapper.MAPPER.map(hashMap);