Lambda表达式函数

一、lambda函数中引用了对象

lambda函数中使用了对象参数,这个对象,在后面进行了操作
在执行run()方法时,此时的message 已经append 了 ‘Howdy,’和‘world!’

/**
 * 测试对象的引用。输出:Howdy, world!
 */
public class VariableTest {

    public static void test_01() {
        StringBuilder message = new StringBuilder();
        Runnable r = () -> System.out.println(message);
        message.append("Howdy, ");
        message.append("world!");
        r.run();
    }

    public static void main(String[] args) {
        test_01();
    }
}

二、引用外部变量

先定义一个函数式接口

@FunctionalInterface
public interface UnitFun {
    void exec();
}

新建一个测试类,在lambda中引用变量

    public static void test_02() {
        String message = "引用变量测试";

        UnitFun r = () -> System.out.println(message);

        r.exec();
    }

执行结果

引用变量测试

这里引用外部变量,变量不强制需要使用 final 修饰

如果,这个变量在后面进行了变更,在编译时会报:effectively final 的错误
image

三、lambda函数的延时执行

lambda函数类似于回调函数,可以延后执行lambda代码块中的代码

static void test_03() {

        Map<String, String> map = new HashMap<>();

        UnitFun r = () -> {
            System.out.println("-- 验证的函数 --");
            String test = map.get("test");
            System.out.println(test);
        };

        System.out.println("--- 执行主函数 ----");
        map.put("test", "写入测试数据");

        r.exec();
    }

执行结果:

--- 执行主函数 ----
-- 验证的函数 --
写入测试数据
posted @ 2021-09-02 17:48  陈析  阅读(162)  评论(0)    收藏  举报