lambda高级进阶--延迟执行
2015-11-23 14:45
218 查看
前面的整理我们也已经说到了,使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点。在使用lambda表达式的时候务必记住一点就是说lambda表达式都是延迟执行的。
延迟执行代码的原因有很多,具体的如下。
1,在另外一个线程中运行代码
2,多次运行代码
3,在某个算法的正确时间点上运行代码,比如排序中的比较操作
4,当某些情况发生时才运行代码
5,只有在需要的时候才运行代码。
当我们在使用lambda表达式的时候,就应该好好的考虑下希望达到什么样的效果。这里来举一个日志的例子吧。
我们在使用logger.info输出日志,代码如下:logger.info("x的长度是:" + x.length());代码是没问题,但是这里会有一个性能上的问题来,不管上面的代码是否被真的执行,这个x的字符串都会被计算然后传递给info方法,那么为什么我们不能再确定需要打印的时候,再去计算这个字符串呢?
怎么改进一下好呢?惯用的办法就是将上面的这段代码包装成一个无参数的lambda的表达式,只有在需要的时候才能运行代码,这也是使用lambda表达式的一种情况。
现在我们来编码,这段编码实际的运行效果分如下步骤:
1,接受lambda表达式
2,检查他是否应该被调用
3,在需要的时候调用它。
以下是包装过后的代码:
延迟执行代码的原因有很多,具体的如下。
1,在另外一个线程中运行代码
2,多次运行代码
3,在某个算法的正确时间点上运行代码,比如排序中的比较操作
4,当某些情况发生时才运行代码
5,只有在需要的时候才运行代码。
当我们在使用lambda表达式的时候,就应该好好的考虑下希望达到什么样的效果。这里来举一个日志的例子吧。
我们在使用logger.info输出日志,代码如下:logger.info("x的长度是:" + x.length());代码是没问题,但是这里会有一个性能上的问题来,不管上面的代码是否被真的执行,这个x的字符串都会被计算然后传递给info方法,那么为什么我们不能再确定需要打印的时候,再去计算这个字符串呢?
怎么改进一下好呢?惯用的办法就是将上面的这段代码包装成一个无参数的lambda的表达式,只有在需要的时候才能运行代码,这也是使用lambda表达式的一种情况。
现在我们来编码,这段编码实际的运行效果分如下步骤:
1,接受lambda表达式
2,检查他是否应该被调用
3,在需要的时候调用它。
以下是包装过后的代码:
public class Linkin { static final Logger LOG = LoggerFactory.getLogger(Linkin.class); public static void delayDebug(Supplier<String> message) { if (LOG.isDebugEnabled())s { LOG.debug(message.get()); } } public static void main(String[] args) { delayDebug(() -> "这里只是随便的测试"); } }
相关文章推荐
- 【C#语言学习】学习一门语言
- 四大组件基本用法与介绍(2)-- BroadcastReceiver
- SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
- 你该活动活动脖子啦
- Java贪吃蛇的简单实现
- JQuery 世界时间
- 用ab的post方式进行测试
- 数据结构实践——二叉树排序树中查找的路径
- 移动设备上的UI布局新方向(思路)
- Fragment与Activity之间传值
- [iOS]UIScrollView 使用 Autolayout
- android Notification 的使用
- linux下软件安装包讲解
- 流言揭秘:关于下雪的“冷”知识,你了解吗?
- What is corresponding Cron expression to fire in every X seconds, where X > 60? --转载
- 移动营业厅bug
- Linux下查看文件和文件夹大小
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
- js实现接收表单的值并将值拼在表单action后面的方法
- js验证是否为空