我在方法中得到一个对象和一个地图,我需要将所有对象字段值迁移到一个地图。稍后将保存在DB中。地图的值不能为空 这是代码:
public static final EMP_LAST_NAME_ATTR = "firstName";
public static final EMP_FIRST_NAME_ATTR = "lastName";
...ect.
和
public void addAttributes(Map<String, String> attributes, Employee employee) {
if (StringUtils.isNotBlank(employee.getFirstName())) {
attributes.put(EMP_FIRST_NAME_ATTR, employee.getFirstName());
}
if (StringUtils.isNotBlank(employee.getLastName())) {
attributes.put(EMP_LAST_NAME_ATTR, employee.getLastName());
}
if (StringUtils.isNotBlank(employee.getEmail())) {
attributes.put(EMP_EMAIL_ATTR, employee.getEmail());
}
...etc many more ifs
}
不幸的是它必须是一张地图,因为数据库表被创建为键/值,我无法更改实体。
有什么方法可以缩短这个IF梦魇吗?
答案 0 :(得分:8)
一种方法是将if块重构为自己的方法:
private void putIfNotBlank(Map<String, String> attributes, String key, String value) {
if (StringUtils.isNotBlank(value)) {
attributes.put(key, values);
}
}
并且您的方法更容易阅读:
public void addAttributes(Map<String, String> attributes, Employee employee) {
putIfNotBlank(attributes, EMP_FIRST_NAME_ATTR, employee.getFirstName());
putIfNotBlank(attributes, EMP_LAST_NAME_ATTR, employee.getLastName());
putIfNotBlank(attributes, EMP_EMAIL_ATTR, employee.getEmail());
}
答案 1 :(得分:1)
private void addAttribute(Map<String, String> attributes, String key, String value) {
if (StringUtils.isNotBlank(value)) {
attributes.put(key, value);
}
}
public void addAttributes(Map<String, String> attributes, Employee employee) {
addAttribute(attributes, EMP_FIRST_NAME_ATTR, employee.getFirstName());
addAttribute(attributes, EMP_LAST_NAME_ATTR, employee.getLastName());
addAttribute(attributes, EMP_EMAIL_ATTR, employee.getEmail());
}
答案 2 :(得分:1)
为你做一个方法。
public void addAttributes(Map<String,String> attributes, Employee employee)
{
addAttribute(attributes, EMP_FIRST_NAME_ATTR, employee.getFirstName());
addAttribute(attributes, EMP_LAST_NAME_ATTR, employee.getLastName());
.....
}
private void addAttribute(Map<String,String> attributes, String ATTR_NAME, String value)
{
if(StringUtils.isNotBlank(value)) attributes.put(ATTR_NAME, value);
}
问题解决了。
答案 3 :(得分:1)
通过创建捕获检查本质的实用工具方法来进行一些重构:
public static void putIfNotBlank(Map<String, String> map, String key, String value) {
if (StringUtils.isNotBlank(value))
map.put(key, value);
}
然后为每个属性调用它:
putIfNotBlank(attributes, EMP_EMAIL_ATTR, employee.getEmail());
答案 4 :(得分:0)
使用Jackson Json ObjectMapper库
ObjectMapper mapper = new ObjectMapper();
Map<String,String> map = mapper.convert(mapper.writeValueAsString(<yourObject),new TypeReference<HashMap<String,String>>(){});
答案 5 :(得分:0)
您可以定义内置此行为的新地图:
public class NonBlankValueMap extends HashMap<String, String> {
@Override
public String put(String key, String value) {
if (StringUtils.isNotBlank(value))
return super.put(key, value);
return null;
}
}
然后简单地说:
Map<String, String> attributes = new NonBlankValueMap();
和
attributes.put(EMP_FIRST_NAME_ATTR, employee.getFirstName());