首页 > 解决方案 > 如何使用 Java 8 改进条件逻辑

问题描述

我正在学习 Java 8,我想知道是否有一种干净的方法可以在 Java 8 中更有效地重写以下代码:

public static Map<String, Character> parseOrg(String org) {
    Map<String, Character> map = new HashMap<String, Character>();
    if (org != null && !org.isEmpty()) {
        String modifiedString = trimOrg(org); //private method to substring
        if (modifiedString.length() == 4) {
            populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), modifiedString.charAt(modifiedString.length()-3), modifiedString.charAt(modifiedString.length()-4));
        } else if (modifiedString.length == 3) {
            populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), modifiedString.charAt(modifiedString.length()-3), null);
        } else if (modifiedString.length == 2) {
            populateMap(modifiedString.charAt(modifiedString.length()-1), modifiedString.charAt(modifiedString.length()-2), null, null);
        } else if (modifiedString.length == 1) {
            populateMap(modifiedString.charAt(modifiedString.length()-1), null, null, null);
        }
    } else {
        LOG.error("Null org provided");
    }
    return map;
}

private static void populateMap(Map<String, Character> map, Character pos0, Character pos1, Character pos2, Character pos3) {
    map.put("Position 3", pos3);
    map.put("Position 2", pos2);
    map.put("Position 1", pos1);
    map.put("Position 0", pos0);
}

标签: javaif-statementlambdajava-8java-stream

解决方案


你可以这样做:

Runnable r = Arrays.asList(() -> {}, YourClass::doD, YourClass::doC, YourClass::doB, YourClass::doA, () -> {})
    .get(Math.min(Math.max(0, org.length()), 4));
r.run();

但老实说,这不值得。只需使用开关即可。


推荐阅读