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