0-优质博客
1. 概述
Lambda表达式,也可称为闭包。类似于JavaScript中的闭包,它是推动Java8发布的最重要的新特性。
2. 示例
我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递)。Lambda允许把函数作为一个方法的参数,使用Lambda表达式可以写出更简洁、更灵活的代码,而其作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
public class LambdaDemo {/*** 成员内部类*/class MyThread01 implements Runnable{@Overridepublic void run() {System.out.println("成员内部类:用Lambda语法创建线程吧!");}}/*** 静态内部类*/static class MyThread02 implements Runnable{@Overridepublic void run() {System.out.println("静态内部类:对啊,用Lambda语法创建线程吧!");}}public static void main(String[] args) {/*** 局部内部类*/class MyThread03 implements Runnable{@Overridepublic void run() {System.out.println("局部内部类:用Lambda语法创建线程吧!");}}/*** 匿名内部类*/Runnable runnable = new Runnable(){@Overridepublic void run() {System.out.println("匿名内部类:求求你,用Lambda语法创建线程吧!");}};//成员内部类方式LambdaDemo lambdaDemo = new LambdaDemo();MyThread01 myThread01 =lambdaDemo.new MyThread01();new Thread(myThread01).start();//静态内部类方式MyThread02 myThread02 = new MyThread02();new Thread(myThread02).start();//局部内部类MyThread03 myThread03 = new MyThread03();new Thread(myThread03).start();//匿名内部类的方式new Thread(runnable).start();}}
new Thread(() -> System.out.println("使用Lambda就对了")).start();
3. 语法
(parameters) -> expression或(parameters) ->{ statements; }1.可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。2.可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。3.可选的大括号:如果主体包含了一个语句,就不需要使用大括号。4.可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
@Testpublic void test01(){Runnable runnable=()-> System.out.println("Runnable 运行");runnable.run();//结果:Runnable 运行}
@Testpublic void test02(){Consumer<String> consumer=(x)-> System.out.println(x);consumer.accept("Hello Consumer");//结果:Hello Consumer}
public void test03(){Consumer<String> consumer=x-> System.out.println(x);consumer.accept("Hello Consumer");//结果:Hello Consumer}
@Testpublic void test04(){Comparator<Integer> com=(x, y)->{System.out.println("函数式接口");return Integer.compare(x,y);};System.out.println(com.compare(2,4));//结果:-1}
@Testpublic void test05(){Comparator<Integer> com=(x, y)-> Integer.compare(x,y);System.out.println(com.compare(4,2));//结果:1}
@Testpublic void test06(){Comparator<Integer> com=(Integer x, Integer y)-> Integer.compare(x,y);System.out.println(com.compare(4,2));//结果:1}
