使用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,我希望它们是互斥的(如果存在条件为真,则不需要检查ifNotExist,因为有时,exists()方法需要花费很多工作量来检查),但我总是有检查两次。我怎么能避免这种情况?
也许“存在”这个词会让别人误解我的想法。你可以想象我还需要一些方法:
ifVisible()
ifEmpty()
ifHasAttribute()
很多人说这是个坏主意,但是:
在Java 8中,我们可以使用lambda forEach而不是传统的for循环。在编程中,如果是两个基本的流量控制。如果我们可以将lambda用于for循环,那么为什么使用lambda呢?
for (Element element : list) {
element.doSomething();
}
list.forEach(Element::doSomething);
在Java 8中,ifPresent是可选的,类似于我对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,我们可以避免这个错误!