使用lambda编程之延迟执行

使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点。

所有的lambda表达式都是延迟执行的。毕竟,如果你希望立即执行一段代码,那就没有必要使用lambda表达式了。延迟执行代码的原因有很多,例如:

在另一个线程中运行代码
多次运行代码
在某个算法的正确时间点上运行代码(例如排序中的比较操作)
当某些情况发生时运行代码(按钮点击,数据到达等)
当你使用lambda进行编程时,应当好好考虑一下希望达到什么样的效果。举个例子:假设你需要记录一个事件的日志:

logger.info(“x:”+x+”,y:”+y);

如果日志级别设置为忽略INFO消息时,该字符串会被计算并传递给info方法,然后再确定是否真的要执行。为什么不能再确定需要打印时,再将字符串合并起来呢?

只有再需要的时候才运行代码,这是使用lambda表达式的一种情况。惯用的方法式将这段代码包装成一个无参数的lambda表达式:()->”x:”+x+”,y:”+y。

封装成一个方法,来执行延迟记录日志就是下面这样了。

public static void info(Logger logger,Supplier<String> messge)

{

    if(logger.isLoggable(Level.INFO))

    {

        logger.info(messge.get());

    }

}

Supplier<String> 作为参数,可以传递一个lambda表达式。

当然也可以直接写 logger.info(()->”x:”+x+”,y:”+y); 这样用。

原文出自:https://www.fastmeteor.com/2017/12/20/使用lambda编程之延迟执行

原文地址:https://www.cnblogs.com/jimoer/p/8322230.html

时间: 2024-11-12 20:24:22

使用lambda编程之延迟执行的相关文章

jdk8新特性--使用lambda表达式的延迟执行特性优化性能

使用lambda表达式的延迟加载特性对代码进行优化: 原文地址:https://www.cnblogs.com/niwotaxuexiba/p/10850339.html

Lambda的延迟执行

在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开了函数式编程的大门. 下面我们做一个初探. Lambda的延迟执行 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费.而Lambda表达式是延迟执行的,这正好可以 作为解决方案,提升性能. 性能浪费的日志案例 注:日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化. 一种典型的场景就是对参数进行有条件使用,例如对日志消息进行拼接后,在满足条件的情况下进行打印输出: pub

JAVA SE 8 学习笔记(三)使用lambda编程

三.使用lambda编程 3.1 延迟执行 所有lambda表达式都是延迟执行的,如果希望立即执行一段代码,则没必要使用lambda表达式 延迟执行代码原因可能有: ·在另一个线程中运行代码 ·多次运行代码 ·在某个算法的正确时间点上运行代码 ·在某些情况发生时运行代码(如按钮点击.数据到达) ·只有在需要时运行代码 例如: public static void info(Logger logger, Supplier<String> message) { if (logger.isLogga

java并发编程降低延迟

目录 java并发编程降低延迟 一.ExecutorService和CompletionService 二.CompletableFuture(重要) 三.stream中的parallel(并行流) 四.实际使用的另外一点总结: java并发编程降低延迟 在平时开发的过程中,其实有很多可以采用多线程优化的地方,像ExecutorService.CompletionService.CompletableFuture和并行流等类,只是没有去注意,这里总结下日常工作中常用的一些方法. 一.Execut

LINQ之路 6:延迟执行(Deferred Execution)

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行.这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时).让我们考虑下面这个query: static void TestDeferredExecution() { var numbers = new List<int>(); numbers.Add(1); IEnumerable<int> query = numbers.Select(n =>

Linq延迟执行

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行.这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时).让我们考虑下面这个query: static void TestDeferredExecution() { var numbers = new List<int>(); numbers.Add(1); IEnumerable<int> query = numbers.Select(n =>

Kotlin基础(四)Lambda编程

Lambda编程 一.Lambda表达式和成员引用 一)Lambda表达式语法 1 //注意与Java8中的区别 2 val sum={ x:Int,y:Int -> x+y } 3 println(sum(5,6)) 4 run { print(33) } 1 data class Person(val name:String,val age:Int) 2 3 fun main(args: Array<String>) { 4 val persons= listOf<Person

iOS: 零误差或极小误差的定时执行或延迟执行?

问题如下: 节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密.对两者间隔要求不能超过0.02秒或更低. 目前使用了 GCD 中的 asyncAfter(deadline:)方法,不过误差总是要大于0.05秒,并且还无法保证误差会不会传递下去.请问有更好的方式来解决误差吗? var time = Date().timeIntervalSince1970 let dq = DispatchQueue(label: "queue", qos:

Windows编程 - 启动可执行(exe)程序 代码(C++)

启动可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 通过输入程序位置启动可执行(exe)程序, 使用windows的CreateProcess()函数, 即可. 示例是调用预先生产的可执行(exe)程序. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <