Optional 使用和不使用 的代码对比

风流意气都作罢 提交于 2020-07-29 09:13:27

使用 Optional

public class OptExample {

    // 从配置中获取文件名,可能没有
    static Optional<String> getFilename() {
        return Optional.empty();
    }

    // 打开文件,可能打开失败
    static Optional<File> openFile(String name) {
        return Optional.empty();
    }

    // 打开文件,文件中的数据格式可能不正确
    static Optional<List<String>> getData(File file) {
        return Optional.empty();
    }

    // 解析数据,数据可能不完整
    static Optional<Map<String, Integer>> parseData(List<String> data) {
        return Optional.empty();
    }

    // 可能出现计算异常
    static Optional<Integer> average(Map<String, Integer> map) {
        return Optional.empty();
    }

    public static void main(String[] args) {
        int avg = getFilename()
                .flatMap(OptExample::openFile)
                .flatMap(OptExample::getData)
                .flatMap(OptExample::parseData)
                .flatMap(OptExample::average)
                .orElseThrow(() -> new RuntimeException("无法执行"));
        System.out.println(avg);
    }
}

不使用 Optional

public class NormalExample {
    static String getFilename() {
        return null;
    }

    static File openFile(String name) {
        return null;
    }

    static List<String> getData(File file) throws IOException {
        return null;
    }

    static Map<String, Integer> parseData(List<String> data) {
        return null;
    }

    static Integer average(Map<String, Integer> map) {
        return null;
    }

    static void exception() {
        throw new RuntimeException("执行错误");
    }

    public static void main(String[] args) {
        String filename = getFilename();
        if (filename == null) {
            exception();
        }

        File file = openFile(filename);

        List<String> data = null;
        try {
            data = getData(file);
        } catch (IOException ex) {
            exception();
        }
        if (data == null) {
            exception();
        }
        Map<String, Integer> map = parseData(data);

        if (map == null) {
            exception();
        }

        Integer avg = average(map);

        if (avg == null) {
            exception();
        }

        System.out.println(avg);
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!