Java - 删除多个IF以进行空检查

时间:2014-04-01 16:04:51

标签: java map

我在方法中得到一个对象和一个地图,我需要将所有对象字段值迁移到一个地图。稍后将保存在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梦魇吗?

6 个答案:

答案 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());