有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何缩短条件代码?(JAV,检查null)

我用它来检查null。DataSet具有字符串整数和Bigdecimal数据类型的结构。 如何缩短条件代码?有办法吗?缩短我的代码。多谢各位

public void ConfrimData(DataSet data) {
            if (StringUtils.isEmpty(data.getA())
                || StringUtils.isEmpty(data.getB())
                || StringUtils.isEmpty(data.getC())
                || StringUtils.isEmpty(data.getD())
                || StringUtils.isEmpty(data.getE())
                || StringUtils.isEmpty(data.getF())
                ){
        if (StringUtils.isEmpty(data.getA())) {
            loggerTransaction.info(Var.VALUE_A);
        }
        if (StringUtils.isEmpty(data.getB())) {
            loggerTransaction.info(Var.VALUE_B);
        }
        if (StringUtils.isEmpty(data.getC())) {
            loggerTransaction.info(Var.VALUE_C);
        }
        if (StringUtils.isEmpty(data.getD())) {
            loggerTransaction.info(Var.VALUE_D);
        }
        if (StringUtils.isEmpty(data.getE())) {
            loggerTransaction.info(Var.VALUE_E);
        }
        if (StringUtils.isEmpty(data.getF())) {
            loggerTransaction.info(Var.VALUE_F);
        }
        return; 
        }

数据集

private String A = null;

private Integer B = null;

private String C= null;

private String D = null;

private BigDecimal E= null;

private String F= null;

共 (3) 个答案

  1. # 1 楼答案

    也许分配一面旗帜

    public void ConfrimData(DataSet data) {
            boolean flag;
            if (flag = StringUtils.isEmpty(data.getA())) {
                loggerTransaction.info(Var.VALUE_A);
            }
            if (flag = StringUtils.isEmpty(data.getB()) || flag) {
                loggerTransaction.info(Var.VALUE_B);
            }
            if (flag = StringUtils.isEmpty(data.getC()) || flag) {
                loggerTransaction.info(Var.VALUE_C);
            }
            if (flag = StringUtils.isEmpty(data.getD()) || flag) {
                loggerTransaction.info(Var.VALUE_D);
            }
            if (flag = StringUtils.isEmpty(data.getE()) || flag) {
                loggerTransaction.info(Var.VALUE_E);
            }
            if (flag = StringUtils.isEmpty(data.getF()) || flag) {
                loggerTransaction.info(Var.VALUE_F);
            }
            if (flag) return; 
    
  2. # 2 楼答案

    在第一个if语句中,检查所有参数,看看是否有空参数。 然后,在内部if语句中,再次检查它们。第一次检查是多余的。return语句也不是必需的,因为它不会提前结束方法或返回任何数据

    下面是一个简短的版本,应该会给出相同的结果:

    public void confirmData(DataSet data) {
        if (StringUtils.isEmpty(data.getA())) {
            loggerTransaction.info(Var.VALUE_A);
        }
        if (StringUtils.isEmpty(data.getB())) {
            loggerTransaction.info(Var.VALUE_B);
        }
        if (StringUtils.isEmpty(data.getC())) {
            loggerTransaction.info(Var.VALUE_C);
        }
        if (StringUtils.isEmpty(data.getD())) {
            loggerTransaction.info(Var.VALUE_D);
        }
        if (StringUtils.isEmpty(data.getE())) {
            loggerTransaction.info(Var.VALUE_E);
        }
        if (StringUtils.isEmpty(data.getF())) {
            loggerTransaction.info(Var.VALUE_F);
        }
    }
    

    编辑

    下面是一个稍微漂亮一点的解决方案,代码重复更少:

    public void confirmData(DataSet data) {
        logIfEmpty(data.getA(), Var.VALUE_A);
        logIfEmpty(data.getB(), Var.VALUE_B);
        logIfEmpty(data.getC(), Var.VALUE_C);
        logIfEmpty(data.getD(), Var.VALUE_D);
        logIfEmpty(data.getE(), Var.VALUE_E);
        logIfEmpty(data.getF(), Var.VALUE_F);
    }
    private void logIfEmpty(Object check, String log) {
        if (StringUtils.isEmpty(check)) {
            loggerTransaction.info(log);
        }
    }
    

    编辑#2

    如果你想执行其他代码,如果你没有找到任何空值,你可以这样做:

    public void confirmData(DataSet data) {
        boolean foundEmpty;
        foundEmpty = logIfEmpty(data.getA(), Var.VALUE_A);
        foundEmpty = logIfEmpty(data.getB(), Var.VALUE_B) || foundEmpty;
        foundEmpty = logIfEmpty(data.getC(), Var.VALUE_C) || foundEmpty;
        foundEmpty = logIfEmpty(data.getD(), Var.VALUE_D) || foundEmpty;
        foundEmpty = logIfEmpty(data.getE(), Var.VALUE_E) || foundEmpty;
        foundEmpty = logIfEmpty(data.getF(), Var.VALUE_F) || foundEmpty;
        if(foundEmpty) {
            return;
        }
    }
    private boolean logIfEmpty(String check, String log) {
        if (StringUtils.isEmpty(check)) {
            loggerTransaction.info(log);
            return true;
        }
        return false;
    }
    
  3. # 3 楼答案

    好吧,你可以使用流稍微减少重复性,但这不一定会让它更好,更不用说更快了:

    LinkedHashMap<Supplier, String> map = new LinkedHashMap<>();
    map.put(data::getA, Var.VALUE_A);
    map.put(data::getB, Var.VALUE_B);
    map.put(data::getC, Var.VALUE_C);
    map.put(data::getD, Var.VALUE_D);
    map.put(data::getE, Var.VALUE_E);
    map.put(data::getF, Var.VALUE_F);
    
    List<String> logMessages = map.entrySet().stream()
        .filter(entry -> StringUtils.isEmpty(entry.getKey().get()))
        .map(Map.Entry::getValue)
        .collect(Collectors.toList());
    if (!logMessages.isEmpty()) {
        logMessages.forEach(loggerTransaction::info);
    }
    else {
        // Remaining code
    }