文章目录
初识Lambda
可以把lambda表达式理解为是可以传递匿名函数的一种方式:他没有名称,但有参数列表,函数主体,返回类型等
Lambda核心思想:
-
确认 Lamda 表达式的类型
-
找到要实现的方法
-
实现这个方法
一、Lambda 表达式结构:
Java8 中引入了一个新的操作符 “->” , 该操作符称为箭头操作符或 Lambda 操作符,该操作符将 Lambda 表达式分为两部分:
左侧:函数式接口中抽象方法的参数列表
右侧:对函数式接口中抽象方法的实现,即 Lambda 体
小例子
(String s) -> s.length //返回int,其中隐含了return
(Apple a) -> a.getWight() > 100 //返回boolean判断a是否大于150
二、函数式接口:
接口中只有一个抽象方法的接口,称为“函数式接口”。 使用了 @FunctionalInterface 注解的接口,说明该接口必须是函数式接口
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
三、Lambda 表达式的基础语法:
1)无参数,无返回值
() -> System.out.println()
public void test1(){
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类实现接口");
}
};
r1.run();
System.out.println("--------------------------------");
Runnable r2 = () -> System.out.println("Lambda表达式实现函数式接口");
r2.run();
}
匿名内部类实现接口
--------------------------------
Lambda表达式实现函数式接口
2)有一个参数,无返回值
(s) -> System.out.println(s)
若参数列表只有一个参数时,小括号可以省略不写
若lambda体中只有一条语句,return 和 大括号都可以省略不写(有return就要写大括号)
public void test2(){
Consumer<String> con1 = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
con1.accept("Hello!");
System.out.println("---------------------------------------");
Consumer<String> con2 = s -> System.out.println(s);
con2.accept("弱水三千,只取一瓢");
}
Hello!
---------------------------------------
弱水三千,只取一瓢
3)两个以上的参数
有两个以上的参数,并且lambda体中