java el if_使用Java lambda而不是'if else'

使用Java 8,我有这样的代码:

if(element.exist()){

// Do something

}

我想转换为lambda风格,

element.ifExist(el -> {

// Do something

});

使用这样的ifExist方法:

public void ifExist(Consumer consumer) {

if (exist()) {

consumer.accept(this);

}

}

但现在我还有其他情况要打电话:

element.ifExist(el -> {

// Do something

}).ifNotExist(el -> {

// Do something

});

我可以写一个类似的ifNotExist,我希望它们是互斥的(如果exist条件为真,则无需检查ifNotExist,因为有时,exists()方法需要花费很多工作量来检查),但我总是要检查两个倍.我怎么能避免这种情况?

也许"存在"这个词会让别人误解我的想法.你可以想象我还需要一些方法:

ifVisible()

ifEmpty()

ifHasAttribute()

很多人说这是个坏主意,但是:

在Java 8中,我们可以使用lambda forEach而不是传统的for循环.在编程中for,if是两个基本的流程控制.如果我们可以使用lambda作为for循环,为什么使用lambda是个if坏主意?

for (Element element : list) {

element.doSomething();

}

list.forEach(Element::doSomething);

在Java 8中,有OptionalifPresent,类似于我对ifExist的想法:

Optional element = ...

element.ifPresent(el -> System.out.println("Present " + el);

关于代码维护和可读性,如果我有以下代码和许多重复的简单if子句,你怎么看?

if (e0.exist()) {

e0.actionA();

} else {

e0.actionB();

}

if (e1.exist()) {

e0.actionC();

}

if (e2.exist()) {

e2.actionD();

}

if (e3.exist()) {

e3.actionB();

}

相比于:

e0.ifExist(Element::actionA).ifNotExist(Element::actionB);

e1.ifExist(Element::actionC);

e2.ifExist(Element::actionD);

e3.ifExist(Element::actionB);

哪个更好?并且,oops,你注意到在传统的if子句代码中,有一个错误:

if (e1.exist()) {

e0.actionC(); // Actually e1

}

我想如果我们使用lambda,我们可以避免这个错误!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值