广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则
  • 692
分享到

进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

javapython开发语言 2023-10-20 16:10:54 692人浏览 独家记忆
摘要

目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口  

目录

        1.0 什么是 Lambda 表达式?

        1.1 既然跟匿名内部类相关,先来回顾匿名内部类。

         1.2 Lambda 表达式与匿名内部类之间的关系。

        1.3 函数式接口

        1.4 在具体代码中来操作一下

        2.0 Lambda 表达式省略规则


        1.0 什么是 Lambda 表达式?

        Lambda 表达式是一种匿名函数,它可以在代码中以简洁的方式表示一个功能或行为。Lambda 表达式通常由参数列表箭头符号函数体组成。参数列表定义了该函数接受的输入参数,箭头符号表示函数体的开始,函数体则定义了函数的具体实现。Lambda 表达式可以作为一个整体被传递给其他函数或方法,也可以直接被调用。

        1.1 既然跟匿名内部类相关,先来回顾匿名内部类。

        匿名内部类是一种在Java中定义匿名类的方式。它允许在创建对象的同时定义该对象的类,并且不需要为该类单独命名。通常情况下,我们需要先定义一个类,然后才能创建该类的对象。但是在某些场景下,我们只需要定义一个临时的类来实现某个接口或继承某个类的功能,这时就可以使用匿名内部类。简单的理解就是减少了新类型的出现。

         1.2 Lambda 表达式与匿名内部类之间的关系。

        Lambda 表达式用于简化匿名内部类的代码写法。

代码如下:

未用 Lambda 表达式进行简化匿名内部类。

public class Text_Lambda {    public static void main(String[] args) {        Animal cat = new Animal(){            @Override            public void fun() {                System.out.println("是只猫");            }        };        Animal dog = new Animal() {            @Override            public void fun() {                System.out.println("是只狗");            }        };        cat.fun();        dog.fun();    }}interface Animal{    public void fun();}

运行结果如下:

Lambda 表达式进行简化匿名内部类。

public class Text_Lambda {    public static void main(String[] args) {        //下面用Lambda表达式简化的代码跟上面的代码式等效的        Animal cat = () -> {                System.out.println("是只猫");            };        //下面用Lambda表达式简化的代码跟上面的代码式等效的        Animal dog = () -> {                System.out.println("是只狗");            };        cat.fun();        dog.fun();    }}interface Animal{    public void fun();}

运行结果如下:

        再简单小结一下,Lambdab 表达式存在的意义就是简化匿名内部类,具体格式为 (被重写方法的形参列表)-> {(被重写方法的方法体)}

        1.3 函数式接口

        现在知道 Lambda 表达式可以简化匿名内部类,但是需要注意的是,并不是所有的匿名内部类都可以用 Lambda 表达式进行简化的,只有函数式接口才可以被 Lambda 表达式简化。

        什么是函数式接口?

        函数式接口是指只包含一个抽象方法接口。在Java中,函数式接口是支持函数式编程的基础,它可以用作 Lambda 表达式的目标类型。

        Java 8引入了@FunctionalInterface注解,用于标识一个接口为函数式接口。编译器会检查被标注的接口是否符合函数式接口的定义,如果不符合,编译器会报错。

如:

        总的来说,如果是接口并且只包含了一个抽象方法,或者引用了 @FunctionalInterface注解的时候都为函数式接口,都可以被 Lambda 表达式简化。

        1.4 在具体代码中来操作一下

               例子 1.0 :

        回顾在介绍到 Arrays 类中的 sort() 静态方法中其中有一个参数就是匿名内部类。

这个方法具体的介绍在此链接:

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)-CSDN博客

        如果想要把这个匿名内部类用 Lambada 表达式进行简化,就想要了解它是否为函数式接口。

该匿名内部类引用了@FunctionalInterface注解,因此,它可以被 Lambda 表达式简化。

Lambda 表达式简化匿名内部类代码如下: 

import java.util.Arrays;public class ArraysAPI {    public static void main(String[] args) {        Student[] students = new Student[4];        students[0] = new Student("张三",32);        students[1] = new Student("李四",21);        students[2] = new Student("王五",20);        students[3] = new Student("赵六",22);        Arrays.sort(students,(Student o1, Student o2)-> {                if (o1.getAge()> o2.getAge()){                    return 1;                } else if (o1.getAge()< o2.getAge()) {                    return -1;                }                return 0;            });        System.out.println(Arrays.toString(students));    }}

提醒一下,以上该代码省略了 Student 类。

运行结果如下:

        已经用 Lambda 表达式进行简化的代码与被屏蔽的代码(未用 Lambda 表达式进行简化)相对比,确实式简化了很多。

               例子 2.0 :

        回顾在介绍到 Arrays 类中的 setAll() 静态方法中其中一个参数为匿名内部类。

 这个方法具体的介绍在此链接:

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)-CSDN博客

        同样的, 如果想要把这个匿名内部类用 Lambada 表达式进行简化,就想要了解它是否为函数式接口。

很显然,这个引用了@FunctionalInterface注解,因此,它可以被 Lambda 表达式简化。

 用 Lambda 表达式简化匿名内部类代码如下: 

import java.util.Arrays;public class ArraysAPI {    public static void main(String[] args) {        double[] arr = new double[]{1.0,2.0,9,4.0,5.0};        Arrays.setAll(arr, (int value) ->{                return arr[value] * 0.8;            });        System.out.println(Arrays.toString(arr));            }}

运行结果如下:

        2.0 Lambda 表达式省略规则

        通过以上的讲解,现在知道函数式接口是可以通过 Lambda 表达式简化的,那么还能不能更进一步简化呢?

        答案肯定是无容置疑的,可以继续简化。

        具体来介绍省略的规则:

        1. 参数类型可以省略不写。

        2.  如果只有一个参数的,参数类型可以省略不写,同时()也可以不写。

        3. 如果重写的方法体只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是 return 语句,也必须去掉 return 语句。

代码如下:

import java.util.Arrays;public class ArraysAPI {    public static void main(String[] args) {        double[] arr = new double[]{1.0,2.0,9,4.0,5.0};        //第一代的样子        //第二代的样子        //第三代的样子        Arrays.setAll(arr,value ->arr[value] * 0.8 );        System.out.println(Arrays.toString(arr));    }}

运行结果如下:

        此时你是不是嘴巴都张大了? 正常,当时的我也是这样的。其实这还不最简化的表达式,还可以更加深入简化!!!这就是好奇心推动我们不断学习的源源不断的动力!

                                                ​​​​​​​本篇先介绍到这!!! 



来源地址:https://blog.csdn.net/Tingfeng__/article/details/133885149

--结束END--

本文标题: 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

本文链接: https://www.lsjlt.com/news/433094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则
    目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口  ...
    99+
    2023-10-20
    java python 开发语言
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • Java 函数式编程与 Lambda 表达式
    文章目录 函数式编程与Lambda表达式 背景介绍 文章目的 目标受众 技术原理及概念 基本概念解释 相关技术比较 ...
    99+
    2023-10-09
    java scala 开发语言
  • 详解Kotlin 高阶函数 与 Lambda 表达式
    详解Kotlin 高阶函数 与 Lambda 表达式高阶函数(higher-order function)是一种特殊的函数, 它接受函数作为参数, 或者返回一个函数. 这种函数的一个很好的例子就是 lock() 函数, 它的参数是一个锁对象...
    99+
    2023-05-31
    kotlin 高阶函数 lambda
  • 关于Java 中的 Lambda 表达式
    这篇文章我们将讨论关于Java 中的 Lambda 表达式,Lambda 表达式是 Java 涉足函数式编程的过程。它接受参数并将其应用于表达式或代码块。以下是语法的基本示例: ...
    99+
    2022-11-12
  • Java 8的Lambda表达式详解
    本篇内容介绍了“Java 8的Lambda表达式详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能接口只包含一个方法的接口被称为功能接口...
    99+
    2023-06-17
  • Kotlin高阶函数与Lambda表达式示例详解
    目录正文1.函数类型2.高阶函数3.系统标准高阶函数4.Lambda表达式正文 Kotlin中函数都是头等的,这意味着它可以存储在变量与数据结构中、作为参数传递给其他高阶函数以及从...
    99+
    2022-12-08
    Kotlin 高阶函数Lambda Kotlin Lambda
  • Java 基础进阶篇(十八):正则表达式匹配规则和应用
    文章目录 一、正则表达式概述二、正则表达式的匹配规则三、正则表达式在方法中的应用3.1 校验手机号、邮箱和座机电话号码3.2 字符串的内容替换和分割 四、编程题目4.1 表示数值的字符串4...
    99+
    2023-09-16
    正则表达式 java 开发语言 leetcode 算法
  • java Lambda表达式的使用心得
    目录Lambda表达式的心得Lambda表达式法传统方法使用Lambda表达式 你首先要知道的Lambda表达式的技巧Lambda表达式只能用来简化仅包含一个public方法的接口的...
    99+
    2022-11-12
  • 详细解读Java的Lambda表达式
    目录Lambda 表达式Lambada 简介简单的示例Lambda 表达式的组成部分函数式接口介绍几个 Java 中重要的函数接口Lambda 表达式 最早接触到 Lambda 表达...
    99+
    2023-05-14
    Java Lambda表达式 Lambda表达式
  • Java中的Lambda表达式是什么
    这篇文章主要介绍“Java中的Lambda表达式是什么”,在日常操作中,相信很多人在Java中的Lambda表达式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的Lambda表达式是什么”的疑...
    99+
    2023-06-25
  • Java的Lambda表达式如何使用
    这篇文章主要介绍“Java的Lambda表达式如何使用”,在日常操作中,相信很多人在Java的Lambda表达式如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Lambda表达式如何使用”的疑...
    99+
    2023-06-30
  • Java的Lambda表达式实例分析
    这篇“Java的Lambda表达式实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java的Lambda表达式实例分析...
    99+
    2023-06-29
  • Java lambda表达式与泛型整理总结
    目录泛型泛型的语法定义泛型的使用语法泛型总结从泛型类派生子类泛型接口lambda表达式lambda表达式概念lambda表达式格式泛型 泛型的语法定义 class 类名 <泛型...
    99+
    2022-11-13
  • Java-lambda表达式入门看这一篇就够了
    目录概述语法函数式接口方法引用构造器引用变量作用域处理lambda表达式 概述 Lambda表达式,也可称为闭包,是JDK8的新特性。Lambda 允许把函数作为一个方法的参数(函数...
    99+
    2022-11-12
  • java8中的lambda表达式,看这篇绝对够
    目录Lambda表达式特性一、lambda表达式介绍1.1 lambda表达式结构 1.2 常见的Lambda表达式1.3 基本语法1.4 类型检查1.5 类型推断1.6 ...
    99+
    2022-11-13
  • Java中Lambda表达式的进化之路详解
    目录Lambda表达式的进化之路为什么要使用Lambda表达式Lambda表达式的注意点下面是Lambda表达式的实现过程1.最开始使用的是定义外部实现类来完成接口2.开始使用静态内...
    99+
    2022-11-12
  • Java Lambda表达式的原理是什么
    这篇文章主要介绍“Java Lambda表达式的原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Lambda表达式的原理是什么”文章能帮助大家解决问题。1、实例...
    99+
    2023-07-05
  • 如何理解Java中的lambda表达式
    这篇文章主要介绍了如何理解Java中的lambda表达式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何理解Java中的lambda表达式文章都会有所收获,下面我们一起来看看吧。Lambda概述Lambda表...
    99+
    2023-06-30
  • Java中lambda表达式的基本运用
    目录一、实现接口二、数字排序三、字符串排序方法四、对象排序总结一、实现接口 调用一个接口中的方法,传统方法:接口类A: package lombda; public interf...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作