网站首页 > java教程 正文
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标注(虽然不加也不会有错误)。编译器会注意到这个标注,如果你的接口中定义了第二个抽象方法的话,编译器会抛出异常。
猜你喜欢
- 2024-10-07 python函数式编程(python函数经典例程)
- 2024-10-07 JavaScript 的函数式编程与面向对象编程区别在哪?
- 2024-10-07 函数式编程:Python和Java的实现方式有哪些?
- 2024-10-07 函数式编程与命令式编程的区别以及函数式编程不需要锁
- 2024-10-07 前端同学如何函数式编程?(前端函数式编程和响应式编程)
- 2024-10-07 java8精华-函数式编程-Function (五)
- 2024-10-07 Java函数式编程实战:Consumer、Predicate和Supplier的使用指南
- 2024-10-07 java码农福音:函数式编程和lambda表达式
- 2024-10-07 深入理解Java中的Lambda表达式和函数式编程的关系
- 2024-10-07 Java 的函数式接口(必懂知识点!)(jdk1.8函数式接口)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)