jdk8 lambda的惰性求值

2019-07-04 00:00:00 惰性 jdk8 求值
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 lambda的惰性求值》

《jdk8 lambda的惰性求值》
《jdk8 lambda的惰性求值》

下一篇:

晓风轻:jdk8 lamdba 惰性求值2zhuanlan.zhihu.com《jdk8 lambda的惰性求值》

    原文作者:晓风轻
    原文地址: https://zhuanlan.zhihu.com/p/34360554
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章