前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你为什么学不会lambda

你为什么学不会lambda

作者头像
潇洒
发布2019-07-03 11:43:50
6240
发布2019-07-03 11:43:50
举报
文章被收录于专栏:石头岛

这个一篇对学习 Lambda 表达式进行解惑的文章,主要是总结了自己在学习 Lambda 表达式时候的一些理解不了的坑进行总结。长篇大论和详细语法,自行谷歌,这里只说一些理解起来不顺的概念。

重要事情说三遍

代码语言:javascript
复制
首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。
首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。
首先 Lambda 表达式 ()->{ } 是一种方法实现,并且在直接调用的时候才会执行。

1. 什么是 ()->{ }

理论造航母,程序就一行。 不提什么是函数式编程,用大白话,其实就是写了一个匿名实现,并且在需要使用这行匿名实现的时候调用了一下,才会直正去执行这个匿名实现方法。 Lambda 表达式,本质上是一种延迟加载执行。将预先写好的实现方法进行加载。到实际使用时,再执行。

演示执行过程:

1.声明一个 Lambda 表达式接口
2.加载一下匿名实现方法
3.执行一下
  1. 新建一个类,声明一个 Lambda 表达式接口 @FunctionalInterface public interface MyFunctional<T> { //只允许存在一个 public abstract 方法 boolean test(T t); }
  2. 新建一个测试类,加载一下匿名函数实现 用来测试 Lambda 表达式的执行顺序 public class MethodReference { public static void main(String[] args) { //1. 一般匿名写法,这里仅是声明了这个匿名写法,但是并没有执行任务操作 testRef((test) -> { System.out.println(String.format("3. lambda 接口调用方法时传入的参数: %s", test)); System.out.println("4.bbb"); return test; }); } public static void testRef(MyFunctional myFunctional) { System.out.println("1. 到这一步,lambda 表达式还没有执行"); System.out.println("2. 传入一个参数"); // 2. 真正的去调用 lambda 表达式的实现方法 myFunctional.say("aaa"); } }

执行结果:

代码语言:javascript
复制
1. 到这一步,lambda 表达式还没有执行
2. 传入一个参数
3. lambda 接口调用方法时传入的参数: aaaa
4. bbb

用 IDEA 到 Functional 接口中点一下,可以看到,直接跳到 MethodReference 这个测试为的这一行 lambda 表达式中,也就是说,当有一个 lambda 表达式实现了 Functional 接口时,并通过以当前 Functional 为形参的方法传入时,可以被调用到。

image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重要事情说三遍
  • 1. 什么是 ()->{ }
  • 演示执行过程:
    • 1.声明一个 Lambda 表达式接口
      • 2.加载一下匿名实现方法
        • 3.执行一下
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档