首页 > 编程语言 >Java Lambda 表达式

Java Lambda 表达式

时间:2024-01-05 22:57:08浏览次数:46  
标签:Java 内部 接口 匿名 表达式 Lambda

目录

简介

Lambda 表达式是 JDK 8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。但 Lambda 表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写。

语法

Lambda 表达式由三部分组成:

  • 参数列表

  • 箭头

  • 主体

image

有两种风格,分别是:

  • 表达式-风格

    (parameters) -> expression

  • 块-风格

    (parameters) -> { statements; }

其中,() 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符,读作:goes to

Java 8 中内部类或者 Lambda 表达式对外部类变量的引用条件放松了,不要求强制的加上 final 关键字了,但是 Java 8 中要求这个变量是 effectively final。

区别

匿名内部类与 Lambda 表达式的区别:

  • 所需类型不同

    匿名内部类:可以是接口、抽象类、具体类。Lambda 表达式:只能是接口。

  • 使用限制不同

    如果接口中有且仅有一个抽象方法,可以使用 Lambda 表达式,也可以使用匿名内部类。如果一个接口中有多个抽象方法,只能使用匿名内部类,而不能使用 Lambda 表达式

  • 实现原理不同

    匿名内部类虽然跟使用 Lambda 表达式效果一样,但是 Lambda 表达式编译后,会自动多生成一个 .class 字节码文件。


参考:

标签:Java,内部,接口,匿名,表达式,Lambda
From: https://www.cnblogs.com/larry1024/p/17948258

相关文章

  • 无涯教程-Redis - Java连接
    在Java程序中开始使用Redis之前,需要确保已在计算机上设置了RedisJava驱动程序和Java,您可以查看无涯教程的Java教程,以在计算机上安装Java。现在,看看如何设置RedisJava驱动程序。您需要从路径下载jedis.jar。确保下载它的最新版本。您需要将jedis.jar包含到类路径中。连接......
  • Java关键字(1)
    Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字:public:表示公共的,可以被任何类访问。private:表示私有的,只能被定义该关键字的类访问。class:用于定义一个类。static:表示静态的,可以用于定义静态变量或静态方......
  • JAVA类和对象
    [JAVA的类和对象]类是一个抽象的概念。对象则是能用来实现具体功能。例如:Scannersc=newScanner(System.in)Scanner是类,sc是对象。我们一般通过sc.xxx来实现输入。类类定义了成员变量和成员方法类是一种引用数据类型使用1.导包-如果使用的目标类,和当前类(含有m......
  • 检测IPV6地址是否合法的Java工具类
    importjava.math.BigInteger;importjava.util.Arrays;importjava.util.HashSet;importjava.util.Set;publicclassipv6{privatestaticfinalCharacter[]IPV6_CHARACTERS={'1','2','3','4','5',&......
  • Java Thread Dump文件分析
    分析线程转储对于确定多线程进程中的问题非常有用,可以通过可视化单个线程转储的状态来解决死锁、锁争用和过多的CPU利用率等问题。通过在分析线程转储后纠正每个线程的状态,可以实现应用程序的最大吞吐量。例如,假设一个进程占用了大量CPU,我们可以找出是否有哪个线程占用CPU最多。如......
  • Java限流功能的实现
    在Java中,限流是一种常见的技术手段,用于控制系统的访问速率,以保护系统免受过载和滥用。以下是一些常见的Java限流实现方法:1.计数器限流这是一种简单而常见的限流方法。在该方法中,我们可以使用计数器来记录每个时间窗口内的请求数量,并与预设的阈值进行比较。如果请求数量超过......
  • 时代变了,Spring 官方抛弃了 Java 8!
    先容许我吐槽一句:Spring官方,窝草nm!原谅我很愤怒!最近编程导航星球和群友们反复问一个问题:为啥用IDEA创建SpringBoot项目时,不能选择Java8了?我本来以为是IDEA版本更新导致的Bug,开始还没在意。直到我今天自己初始化项目时才发现:卧槽,Java8真没了?!具体一点,应该是使用IDEA......
  • 【从零开始重学Java】第3天
    前情提示从零开始重学Java第0天从零开始重学Java第1天从零开始重学Java第2天表达式和流程控制语句表达式操作数常量(只有简单数据类型和String)变量运算符位运算只对字符char和整型生效Java里<<(算术)左移>>(算术)右移>>>无符号(逻辑)右移运算符优先......
  • JAVA方法重载(函数)
    [JAVA方法]方法重载重载指的是多个方法名称相同,但参数列表不同参数列表不同分为:参数个数不同参数类型不同参数的多类型顺序不同注意事项一个表达式中的最后结果以数据类型范围大的为结果的数据类型。无法因为返回值类型不同进行重载。参数传递对于引用类......
  • JavaScript——函数的call、apply、bind方法
    JavaScript的函数拥有三个方法:callapplybind这三个方法都可以改变函数被调用时,函数内部this的指向。至于区别,阅读下面代码即可一目了然:functionmyCall(context){constargs=[...arguments].slice(1)letresultcontext=context?context:window......