Java之Lambda表达式详解

news/2025/3/31 18:52:30/

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

一、lambda 表达式的语法格式如下:

标准格式:

(形式参数)->{代码块}
Lambda表达式组成三要素:括号,箭头,代码块

Lambda表达式的代码分析
●  (): 里面没有内容,可以看成是方法形式参数为空
●  ->:用箭头指向后面要做的事情
●  {}: 包含一段代码,我们称之为代码块,可以看成是方法体中的内容

实例如下,用匿名内部类和Lambda表达式分别启动一个线程,相对于匿名内部类,我们会发现 Lambda 表达式更简洁


public class RunableDemo01 {public static void main(String[] args) {//匿名内部类的方式启动一个线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"线程启动啦");}}).start();//Lambda表达式的方式启动一个线程new Thread(()-> System.out.println(Thread.currentThread().getName()+"线程启动啦")).start();}
}

二、Lambda表达式具体实例:

Lambda表达式使用前提

  • 有一个接口
  • 接口中有且仅有一个抽象方法

实例一
Lambda表达式是 方法 在调用接口中抽象方法时 直接实现接口中的抽象方法(如下)
在这里插入图片描述
实例二
这个是抽象方法带参时Lambda表达式如何传参(如下)
在这里插入图片描述
实例三:
Lambda表达式在一些情况下是可以省略简写的(如下)
接口:

package cnn.lambdaTest.Demo04;public interface LamDemoImpl {void fun(String s);
}

测试类:


public class LamDemo01 {public static void main(String[] args) {useFun((String s)->{System.out.println(s);});//参数的类型可以省略useFun((s)->{ System.out.println(s);});//单个参数可以省略括号useFun(s-> {System.out.println(s);});//代码块中单个语句可以省略大括号useFun(s-> System.out.println(s));}private static void useFun(LamDemoImpl la) {la.fun("如何省略呢");}
}

省略的几种情况:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式使用注意事项:

  1. 使用Lambda表达式必须要有接口,并且接口中有且只有一个抽象方法
  2. 必须有上下文环境,才能推导出Lambda表达式对应的接口
根据局部变量的赋值知Lambda对应的接口: Runnabler=() -> System.out.println("Lambda表达式");
根据调用方法的参数得知Lambda对应的接口: new Thread() -> System.out.printIn("Lambda表达式).start();

Lambda表达式与匿名内部类的区别可以看这个:传送门,有助于加深Lambda表达式的理解


http://www.ppmy.cn/news/970167.html

相关文章

The Lambda Calculus and Combinators

Combinatory logic and lambda-calculus, originally devised in the 1920s, have since developed into linguistic tools, especially useful in programming languages. The λ-calculusCombinatory logicThe power of λ and CLComputable functionsUndecidabilityFormal …

Java中的Lambda表达式

Java中的Lambda表达式 含义: Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 表达式是使用最小可能语法编写的函数定义: Lambda 表达式产生函数,而不是类。 虽然在 JVM(Java Vir…

Lambda方式创建多线程

Lambda方式创建多线程 一、Lambda表达式的标准格式 Lamdba创建线程,是对匿名内部类创建多线程的简化 由三部分组成: a、一些参数b、一个箭头c、一段代码格式: (参数列表)->{一些重写方法的代码}解释说明…

lambda表达式filter使用

filter经常使用到,作为一个积累,直接贴代码 实体类 public class User implements Serializable {private String name;private Integer age;private String address;private BigDecimal balance;private Date createTime;public String getName() {return name;}public void…

JAVA Lambda表达式过滤

1. list字符串去重List<String> unique list.stream().distinct().collect(Collectors.toList());2.集合对象去重// Person 对象 public class Person {private String id;private String name;private String sex;<!--省略 get set--> }// 根据name去重 List<…

python lambda 判断_关于 Python中lambda 使用

在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? 下面就上面的问题进行一下解答。 1、lambda是什么? 看个例子: 1 g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>>3 当然,你也…

python key=lambda函数_Python lambda函数,pythonlambda

lambda x: 3*x+1 怎么用它呢 , 来给它一个名字 g = lambda x:3*x+1 调用一下它 g(2) 如果想有多个input怎么办? 比如说想把 first name 和 last name 合起来 ? full_name = lambda fn,ln: fn.strip().title() + " " +ln.srip().title() .tit…

C#中Lambda表达式总结

在C#的语法中有一种比较特殊的写法&#xff0c;叫做Lambda表达式&#xff0c;这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的&#xff1a;>。例如&#xff0c;我们要查找学生的List集合中班级编号为1001的所有学生数据&#xff0c;我们即可…