网站首页 > 技术文章 正文
函数式接口的概念
函数式接口:接口中只有一个抽象方法。
函数式接口主要配合Lambda表达式使用。
如何检测一个接口是否是函数式接口,可以使用 @FunctionalInteface 注解,在编译时进行检查。
符合函数式接口的可以不用添加 @FunctionalInterface 也可以正常使用。
如何理解函数式接口
接口只有被实现后才能调用对应的方法。如果不想编写一个类实现接口中的方法,可以使用匿名类直接生成一个对象进行调用。
函数式接口的好处在于类中只用一个抽象方法,当使用Lambda表达式,刚好就是一个匿名类调用唯一的一个方法。
java 内置的四个函数式接口
函数式接口 | 参数类型 | 返回值类型 | 用途 |
Consumer<T> | T | void | 操作T对象,无返回值。accept() |
Supplier<T> | void | T | 返回对象T。 get() |
Function<T,R> | T | R | 操作T对象,返回R对象。apply() |
Predicate<T> | T | boolean | T对象进行判断,是否满足条件。test() |
Comsumer 示例:
//匿名类
Consumer<String> consumer = new Consumer<>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
consumer.accept("comsumer");
//Lamdba 表达式
Consumer<String> consumerLambda = (s) -> System.out.println(s);
consumerLambda.accept("consumerLambda");
Supplier示例:
Supplier<String> supplier = new Supplier<>() {
@Override
public String get() {
return "supplier hello";
}
};
System.out.println(supplier.get());
Supplier<String> supplierLambda = () -> "supplierLambda";
System.out.println(supplierLambda.get());
Function示例:
Function<Integer, String> function = new Function<>() {
@Override
public String apply(Integer integer) {
return String.valueOf(integer);
}
};
System.out.println(function.apply(100));
Function<Integer,String> functionLambda = (i) -> String.valueOf(i);
System.out.println(functionLambda.apply(120));
Predicate示例:
Predicate<Integer> predicate = new Predicate<>() {
@Override
public boolean test(Integer integer) {
return integer > 10;
}
};
System.out.println(predicate.test(100));
Predicate<Integer> predicateLambda = (i) -> i > 10;
System.out.println(predicateLambda.test(5));
小结:
Lambda表达式组成 ()-> {} ,当只有一个参数时 ()可以省略,当只用一行代码时{} 可以省略。
根据匿名类和Lambda表达式的对比,可以找出规律。Lambda表达式中 ()就是函数式接口匿名类中方法的 参数列表 ,Lambda表达式{} 就是 函数式接口匿名类 方法中对应的代码块。
猜你喜欢
- 2024-11-16 3.1 Python高级编程-函数式编程工具
- 2024-11-16 面向对象编程的一些思考(面向对象编程的理解)
- 2024-11-16 知识总结-Java8 Stream函数式编程
- 2024-11-16 bind、call、apply 区别?如何实现一个bind?
- 2024-11-16 Javascript基础重拾笔记之手写apply、call
- 2024-11-16 java 8新特性 常用内置函数式接口
- 2024-11-16 7、JavaScript 内置的常用对象有哪些?该对象常用的方法(必会)
- 2024-11-16 Java中“::”是什么含义(java中+是什么)
- 2024-11-16 Java 8 中的 Function:让代码从繁琐到简洁的魔法工具
- 2024-11-16 13万字详细分析JDK中Stream的实现原理(中)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-