网站首页 > 基础教程 正文
Java8的新引入,包含函数式的设计,接口都有@FunctionalInterface的注解,函数式接口,有且仅有一个抽象方法。
Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:
- Predicate<T>——接收 T 并返回 boolean
- Consumer<T>——接收 T,不返回值
- Function<T, R>——接收 T,返回 R
- Supplier<T>——提供 T 对象(例如工厂),不接收值
- UnaryOperator<T>——接收 T 对象,返回 T
- BinaryOperator<T>——接收两个 T,返回 T
import java.util.function.*;
/**
* 函数式接口测试
*/
public class FunctionDemo {
public static void main(String[] args) {
//断言 用作条件判断
Predicate<String> predicate = (s) -> s.equals("1024") ;
System.out.println( predicate.test("1024") );
//以上结果返回true
//消费者
Consumer<String> consumer = (c) -> System.out.println( c );
consumer.accept( "1024" );
// 有参数,没有返回值
//可以进行计算,并返回结果
Function<Integer,Integer> function = (i) -> i*i ;
System.out.println( function.apply( 8 ) );
//返回计算的结果为64
//生产者
Supplier<String> supplier = () -> "1024" ;
System.out.println( supplier.get() );
//返回预设值的1024值, 与工厂模式很类似
//运算
BinaryOperator<Integer> binaryOperator = (i,j)-> i+j ;
System.out.println( binaryOperator.apply( 8, 8 ) );
//以上的运算的结果为16
}
}
Java 8 采用函数式接口作为Lambda 表达式的目标类型。函数式接口(Functional Interface)是一个有且仅有一个抽象方法声明的接口。任意只包含一个抽象方法的接口,我们都可以用来做成Lambda表达式。每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。函数式接口与其他普通接口的区别:
- 函数式接口中只能有一个抽象方法
- 接口中唯一抽象方法的命名并不重要,因为函数式接口就是对某一行为进行抽象,主要目的就是支持 Lambda 表达式
- 自定义函数式接口时,应当在接口前加上@FunctionalInterface标注(虽然不加也不会有错误)。编译器会注意到这个标注,如果你的接口中定义了第二个抽象方法的话,编译器会抛出异常。
- 上一篇: Java Lambda从入门到精通八 常用函数式接口总结
- 下一篇: 用Java8来进行函数式编程
猜你喜欢
- 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)