Lambda
概述
- lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法
- 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例
- 可以将 lambda 表达式视为一个对象,可以将其作为参数传递
lambda 语法
- 无参数,无返回值
()-> System.out.println("Hello Lambda!")
- 有一个参数,并且无返回值
(x)-> System.out.println(x)
- 若只有一个参数,小括号可以省略不写
x-> System.out.println(x)
- 有两个以上的参数,有返回值,并且 Lambda体中有多条语句
Comparator<Integer> com =(x,y)->(System.out.print1n("函数式接口") return Integer.compare(x,y)
- 若 Lambda体中只有一条语句, return和大括号都可以省略不写
Comparator<Integer> com =(x,y) -> Integer. compare (x,y)
- Lambda表达式的参数列表的数据类型可以省略不写,编译器通过上下文推断出,数据类型,即“类型推断”
(Integer x, Integer y)-> Integer. compare(x, y)
内置接口
-
使用lambda的前提是存在函数式接口
ps:为了使用一些通用功能还是需要自己定义函数接口,为了解决这个问题提供了内置函数式接口
-
四大核心接口
接口 参数类型 返回类型 用途 Consumer(消费型接口) T void 对类型为T的对象应用操作,void accept(T t) Supplier 供给型接口 无 T 返回类型为T的对象,T get(); Function<T, R> 函数型接口 T R 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法:R apply(T t); Predicate 断定型接口 T boolean 类型为T的对象是否满足某约束,并返回boolean 值。包含方法boolean test(T t) -
其他接口
接口 参数类型 返回类型 用途 BiFunction<T, U, R> T, U R 对类型为 T, U 参数应用操作, 返回 R 类型的结果。包含方法为 R apply(T t, U u); UnaryOperator (Function子接口) T T 对类型为T的对象进行一元运算, 并返回T类型的结果。包含方法为 T apply(T t); BinaryOperator(BiFunction 子接口) T,T T 对类型为T的对象进行二元运算, 并返回T类型的结果。包含方法为T apply(T t1, T t2); BiConsumer<T, U> T,U void 对类型为T, U 参数应用操作。包含方法为void accept(T t, U u) ToIntFunction
ToLongFunction
ToDoubleFunctionT int
long
double分 别 计 算 int 、 long 、double、值的函数 IntFunction
LongFunction
DoubleFunctionint
long
doubleR 参数分别为int、long 、double 类型的函数
方法引用
-
当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用
-
“::” 将方法名和对象或类的名字分隔开
对象::实例方法
类::静态方法
类::实例方法