栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于Lambda表达式实现链式if-else if-else调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于Lambda表达式实现链式if-else if-else调用

对于Java代码中常见的if-else if-else比较繁琐,那在lambda场景下如何实现链式调用呢。

public class OptionalCondition {

    private final T value;

    private OptionalCondition(final T value) {
        this.value = value;
    }

    public static  OptionalCondition of(T obj) {
        return new OptionalCondition<>(obj);
    }

    public static  OptionalCondition of(Supplier supplier) {
        return new OptionalCondition<>(supplier.get());
    }

    public Then when(Function condition) {
        return new Then<>(condition, this.value);
    }

    public static class Then {

        private Function condition;

        private T value;

        Then(Function condition, final T value) {
            this.condition = condition;
            this.value = value;
        }

        public Else then(Consumer consumer) {
            if (condition.apply(this.value)) {
                consumer.accept(value);
                return NOOP_ELSE;
            } else {
                return new Else<>(value);
            }
        }
    }

    public static class Else {

        private final T value;

        Else(final T value) {
            this.value = value;
        }

        public Then elseWhen(Function condition) {
            return new Then<>(condition, this.value);
        }

        public void orElse(Consumer consumer) {
            if (null != consumer) {
                consumer.accept(value);
            }
        }
    }

    private static final Else NOOP_ELSE = new NoopElse();

    private static final Then NOOP_THEN = new Then(null, null) {
        @Override
        public Else then(Consumer consumer) {
            return NOOP_ELSE;
        }
    };

    public static class NoopElse extends Else {

        NoopElse() {
            super(null);
        }

        @Override
        public final void orElse(Consumer consumer) {

        }

        @Override
        public final Then elseWhen(Function condition) {
            return NOOP_THEN;
        }
    }
}

测试类:

public class TestOptional {

    @Test
    public void test(){
        OptionalCondition.of("1234").when(val-> Objects.equals("123", val))
                .then(val -> System.out.println("then " + val))
                .elseWhen(val-> Objects.equals("1234", val))
                .then(val -> System.out.println("elseWhen " + val))
                .elseWhen(val-> Objects.equals("12345", val))
                .then(val -> System.out.println("elseWhen2 " + val));
//                .orElse(val -> System.out.println("else " + val));
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340693.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号