网站首页 > 基础教程 正文
Lambda表达式简介
Lambda表达式是java 1.8才开始有的重要功能,使用Lambda表达式可以替代匿名内部类,代码简洁易懂,提升工作效率。上代码:
函数式接口简介
有且只有一个抽象方法(可以包含default或static方法,但Object类除外)的接口是函数式接口。@FunctionlInterface就是用来指定某个接口必须是函数式接口。@FunctionalInterface不是必须的,只是告诉编译器检查这个接口,保证该接口只能包含一个抽象方法,否则就会编译出错。@FunctionalInterface主要是帮助程序员避免一些低级错误,比如多个抽象方法。
Java8 之前的函数式接口
java.util.Comparator //排序接口
java.lang.Runnable //线程无返回值接口
java.util.concurrent.Callable<V> //线程有返回值接口
java.lang.reflect.InvocationHandler //动态代理接口
等等......
常用的函数式接口
Java1.8函数式接口都在rt.jar的java.util.function包中,以下是经常用到的函数式接口(一定要熟记,其他的函数式接口都是在这些函数式接口上的扩展
):
名称 | 唯一抽象方法 | 备注 |
Consumer< T > | void accept(T t); | 接收一个参数,无返回值,即数据消费接口 |
Predicate< T > | boolean test(T t); | 接收一个参数,返回布尔值,即数据判断接口 |
Supplier< T > | T get(); | 无参数,有返回值,即数据获取接口 |
Function< T, R > | R apply(T t); | 接收T类型参数,返回R类型结果,即数据映射接口(一般输入和输出是不同类型的) |
BiConsumer<T, U> | void accept(T t, U u); | 接收两个输入,无返回值,数据消费接口 |
UnaryOperator<T> extends Function<T, T> | T accept(T t); | 接收一个参数,有返回值,输入和输出是相同类型,即数据映射接口 |
BiFunction<T, U, R> | R apply(T t, U u); | 接收2个输入,有返回值,输入和输出是不同类型,即数据映射接口 |
BinaryOperator<T> extends BiFunction<T,T,T> | T apply(T t, T u); | 接收2个输入,有返回值,输入和输出是相同类型,即数据映射接口 |
自定义函数式接口
通过上面的学习我们已经知道函数式接口的定义和分类,接下来我们实战自定义函数式接口 。废话不多说,代码走起来。
定义一个无参无返回值的函数式接口
定义包含default、static方法的无参有返回值的函数式接口
定义有一个参数,无返回值的函数式接口
自定义函数式接口测试
@Test
public void testMyFuncationInterface() {
// 1.无参无返回值
IBossService boss = () -> System.out.println(" invoke m3");
boss.m3();
// 2.无参有返回值
IBossService3<String> boss3 = () -> "m3";
boss3.m3();
// 3.有参无返回值
IBossService2<String> boss2 = e -> System.out.println("param:" + e);
boss2.m3("lambda");
// 4.有参有返回值
IBossService4<String, Integer> boss4 = e -> 1;
boss4.m3("lambda");
}
@FunctionalInterface
interface IBossService {
static int m2() {
return 2;
}
default void m1() {
System.out.println("m1");
}
void m3();
}
@FunctionalInterface
interface IBossService3<R> {
static int m2() {
return 2;
}
default void m1() {
System.out.println("m1");
}
R m3();
}
@FunctionalInterface
interface IBossService2<E> {
static int m2() {
return 2;
}
default void m1() {
System.out.println("m1");
}
void m3(E e);
}
@FunctionalInterface
interface IBossService4<T, R> {
static int m2() {
return 2;
}
default void m1() {
System.out.println("m1");
}
R m3(T t);
}
- 上一篇: JAVA新特性的入场券-函数式接口
- 下一篇: 这两个最基础的函数式接口,为什么一定要弄明白?
猜你喜欢
- 2024-11-30 Java开发「函数式编程」——Lambda表达式
- 2024-11-30 玩转java8 lambda表达式三之对象方法引用
- 2024-11-30 Java 中的 Supplier:让数据生成更灵活
- 2024-11-30 Java 中的 Predicate:让判断逻辑更清晰灵活
- 2024-11-30 Java8精华-函数式编程(一)读完这篇,你将彻底理解
- 2024-11-30 你知道实现一个JAVA接口有几种方式吗?配合lambda更加意想不到
- 2024-11-30 java8精华-函数式编程-Predicate(四)
- 2024-11-30 巧妙应用 Java 的 Functional Interface:让代码更简洁、更灵活
- 2024-11-30 函数式接口编程真没那么难,简单几行让你的代码更优雅
- 2024-11-30 初窥函数式接口,不会取标题,没有噱头,全是干货
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)