一文讲明白Lambda,函数式接口,方法引用,Stream流

本文详细介绍了Java 8中的新特性,包括Lambda表达式的概念、作用和用法,函数式接口的定义与应用,方法引用的简化写法及其优势,以及Stream API的基本操作和使用场景。通过实例解析,帮助读者掌握这些新特性,提升代码的简洁性和效率。
摘要由CSDN通过智能技术生成

一文讲明白Lambda,函数式接口,方法引用,Stream流

前言

"What->Why->How"是人类探索学习的思维过程,即心理学的解决过程,本文使用WWW思维过程,和大家学习一下JDK1.8的内容.

Java SE 8.0 / 1.8 Spider(蜘蛛)发布于 2014-03-18 ,现在已经是2021年了,相信还有很多同学不会使用jdk8的新特性,我们公司也是从去年才将jdk1.7升级为jdk 8.没实践过,不会很正常.但jdk1.8是个长期维护的大版本,虽然 JDK 现在已经更新到JDK15了(15.0.2 January 19, 2021 ).但是jdk8的使用率依然占有很大的比例.

话不多说,我们开始吧.

Lambda表达式

What

  • Lambda表达式基于数学中的λ演算得名, Lambda 表达式(lambda expression)是一个匿名函数

  • Lambda 一个希腊字母。拉姆达 Λ Lambda(大写Λ,小写λ),是第十一个希腊字母

  • Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。

  • 语法

    • //在没有Lambda表达式的时代
      //通常使用匿名内部类来实现
          new Thread(new Runnable(){
             
              @Override
              public void run(){
             
                  // statement
              }
          })
      //可以使用lambda简化为
          new Thread(()->{
             statement});
      
      (parameters) -> expression 或
      (parameters) ->{
              statements; }
      
      请往下看具体特征
      
  • 特征

    • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

    • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

    • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

    • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需 要指定明表达式返回了一个数值。

    • lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内 部修改定义在域外的局部变量,否则会编译错误

    • //1. 不需要参数,返回值为 5
      () -> 5
      // 2. 接收一个参数(数字类型),返回其 2 倍的值
      x -> 2 * x
      // 3. 接受 2 个参数(数字),并返回他们的差值
      (x, y) -> x – y
      // 4. 接收 2 个 int 型整数,返回他们的和
      (int x, int y) -> x + y
      // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回 void)
      (String s) -> System.out.print(s)
      

Why

  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。 在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法。 然后我们定义了 sayMessage 的执行。 -
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化 的编程能力。

How

Talk is cheap,Show me the Code!

public class LambdaTest {
   


    /**
     * 首先定义一个接口 字符串消费者
     * <p>
     * 只有一个方法,消费字符串
     */
    @FunctionalInterface
    interface StringComsumer {
   
        /**
         * 消费字符串
         *
         * @param string
         */
        void consumeString(String string);
    }


    public static void main(String[] args) {
   
        //要被消费的字符串
        final String helloWorld = "Hello World!!!";

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值