• Java函数式编程(1):Lambda表达式(2)


    您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~

    从之前的Lambda表达式的演变过程可以知道,Lambda表达式其实是一个对匿名内部类的简化过程:去掉了多余的语法修饰,只保留最最核心的部分。在Java中类似这种使用匿名内部类写代码的场景非常多,比如Runnable接口,就是典型的最好使用Lambda表达式的地方。例如这样的代码:

     

    可以清除地看到代码的简化过程。

    所以Lambda表达式的特点在于:

    1、匿名:像匿名函数一样,没有名字,只有代码块

    2、函数:基于接口函数执行,而不是类

    3、行为:传递行为,而非封装代码

    很多刚开始学习Lambda表达式的人之所以觉得比较难适应,是因为没有弄明白完整的匿名函数是如何进行简化的这个过程。我个人的学习经验是,只要脑子里时时记着:Lambda是对匿名函数的简化,就会容易理解一些了。

    Java8除了将匿名内部类改造成了Lambda表达式之外,还提供了一个注解,叫做@FunctionalInterface。它专门用来自定义需要的函数式接口。例如:

    1. /**
    2. * 定义一个函数式接口
    3. *
    4. * @author 湘王
    5. */
    6. @FunctionalInterface
    7. public interface FruitInterface {
    8. void select(T t);
    9. }

     

    它可以这么来用:

    FruitInterface face = (t) -> System.out.println("这是自定义的函数式编程接口");

    省略了实例化的类名、省略了方法名、省略了参数类型,只显示方法的参数和方法体。自然过渡到Lambda表达式的建议:

    这是Java提供的注解。除了这个注解以外,为了方便码农开发,Java也预定义了一堆可以直接拿来就用的函数式接口,常用的都列到这个表里了:

     

    什么是供给型呢?意思就是没有消费却能提供输出(消费指的是有没有参数)。例如之前说的Runnable就是一个供给型接口,可以简化成:

    () -> System.out.println("这是run()方法里面的打印语句");

    再比如预测型,可能是:

    FruitInterface face = (t) -> System.out.println("这是自定义的函数式编程接口");

    所以,先把Java预定义的函数式接口弄熟也是一个不错的开始。

    之所以花这么多篇幅来说Lambda表达式和函数式接口,是因为这玩意确实是比较难理解。不管对于刚入门的新手,还是有了一些开发经验的老手,都是如此。所以,新人不必觉得为啥自己学不会。不止是新人,很多有多年开发经验的人都容易卡在这里,这也是我为啥宁可多花点篇幅反复啰嗦的原因。

    至于方法引用和构造器引用,并不是什么高大上的技术,只要把Lambda表达式和函数式编程的底层原理搞懂了,那玩意分分钟学会。


    感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

  • 相关阅读:
    更强大的 MQTT over QUIC 桥接 & Azure 桥接
    Mybatis入门
    Hive 常见数据倾斜场景及解决方案(Map\Join\Reduce端)
    (附源码)ssm华立学院门户网站 毕业设计 290011
    【边缘注意:深度多尺度特征】
    java毕业设计项目选题springboot汉赛汽车租赁平台
    Windows11+VS2019驱动开发环境搭建
    西宾猫耳下载工具(missevandown)
    java计算机毕业设计新城街道社区的健康档案管理平台源码+mysql数据库+lw文档+系统+调试部署
    飞书开放平台Java-Sdk
  • 原文地址:https://blog.csdn.net/lostrex/article/details/127678759