jdk8 lambda的惰性求值
package jdk8.lazy;
import java.util.function.Supplier;
class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
System.out.println("toString invoked");
// 假设一些耗时方法 try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "User [name=" + name + "]";
}
}
class MyLog {
public void debug(String s) {
if (isDebug()) {
doPrint(s);
}
}
public void debug(Supplier<String> s) {
if (isDebug()) {
doPrint(s.get());
}
}
private void doPrint(String s) {
System.out.println(s);
}
/** * 测试用,都返回false * * @return */
public boolean isDebug() {
return false;
}
}
/** * 惰性求值 * * @author 晓风轻 * */
public class LazyDemo {
public static void main(String[] args) {
User user = new User();
user.setName("晓风轻");
MyLog log = new MyLog();
System.out.println("--------1--------");
// 第一种写法:字符串拼接白白执行了 log.debug("打印一些字符串:" + user.toString());
System.out.println("--------2--------");
// 第2种写法:加判断 // 代码不好看,而且isDebu方法执行了2次,浪费了一次 if (log.isDebug()) {
log.debug("打印一些字符串:" + user.toString());
}
System.out.println("--------3--------");
// 第3种写法,利用lambda表达式实现惰性求值,完美 log.debug(() -> "打印一些字符串:" + user.toString());
System.err.println("----end----");
}
}
打印日志我们的写法,一般性能要求高的时候会要求第2种写法,现在用了lambda后,可以用第3种写法啦,不需要加if判断。
jdk8自带的Logger已经是这样了!
下一篇:
晓风轻:jdk8 lamdba 惰性求值2 zhuanlan.zhihu.com
原文作者:晓风轻
原文地址: https://zhuanlan.zhihu.com/p/34360554
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://zhuanlan.zhihu.com/p/34360554
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章