携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
继续嗑 Lambda 表达式,既然好不容易做一次 Lambda 表达式的汇总,就一次性做齐喽,也方便自己以后回顾......冲......上次说到了,Lambda 表达式的语法,继续......
函数式接口
函数式接口:只包含一个抽象方法的接口。可以通过 Lambda 表达式来创建该接口的实现对象。可以在任意函数式接口上使用 @FunctionalInterface 注解,用于检测它是否是一个函数式接口,同时 JavaDoc 也会包含一条声明,说明该接口是一个函数式接口。
自定义函数式接口
根据函数式接口定义,自定义函数式接口:
@FuctionalInterface
public interface MyFuncInterface<T> {
public T getValue(String str);
}
定义一个方法将函数式接口作为方法参数:
public String toLowerString(MyFuncInterface<String> mfi, String str) {
return mfi.getValue(str);
}
将 Lambda 表达式实现的接口作为参数传递:
public void testDemo() {
String value = toLowerString((str) -> {
return str.toLowerCase();
}, "WOSHICHENGUANXI");
System.out.println(value);
}
结果:
woshichenguanxi
Java 内置函数式接口
| 函数式接口 | 参数类型 | 返回类型 | 用途 |
|---|---|---|---|
| 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 ToDoubleFunction | T | int long double | 分别计算 int、long、double 值得函数 |
| IntFunction LongFunction DoubleFunction | int long double | R | 参数分别为 int、long、double 类型的函数 |
怎么不知不觉写了半天的函数式接口......也算跟 Lambda 表达式有关吧?今天暂且就先学习到这,下课!
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!