Lambda表达式的语法:
([Lambda参数列表,即形参列表]) -> {Lambda体,即方法体}
拷贝小括号,写死右箭头,落地大括号,大括号中写上业务逻辑
@Functionalnterface
default
静态方法
特点:使用 "->"将参数和实现逻辑分离;( ) 中的部分是需要传入Lambda体中的参数;{ } 中部分,接收来自 ( ) 中的参数,完成一定的功能。
Lambda表达式的分类
无参无返回值
package com.isea.java;
public class TestLambda {
public static void main(String[] args) {
new Thread(() -> System.out.println("Hello"));
}
}
//()中无参数,也不能省略;{}中只有一句话,建议省略。
有参无返回值
package com.isea.java;
import java.util.ArrayList;
public class TestLambda {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("AAAAA");
list.add("BBBBB");
list.add("CCCCC");
list.add("DDDDD");
//形参的类型是确定的,可省略;只有一个形参,()可以省略;
list.forEach(t -> System.out.print(t + "\t"));
//或者更简洁的方法引用:list.forEach(System.out::println);
//打印结果:AAAAA BBBBB CCCCC DDDDD
}
}
public void forEach(Consumer<? super E> action)
forEach() 功能等同与增强型for循环 这个方法来自于Iterable接口,Collection接口继承了这个接口,List又继承了Collection接口,而ArrayList是List的实现类;forEach函数,指明该函数需要传入一个函数,而且是有参数没有返回值的函数,而Consumer接口中正好有且仅有一个这样的有参无返回值的抽象方法。接下来,我们会了解到这是使用Lambda的必要条件。
void accept(T t);// from source code
无参有返回值
package com.isea.java;
import java.util.Random;
import java.util.stream.Stream;
public class TestLambda {
public static void main(String[] args) {
Random random = new Random();
Stream<Integer> stream =