简介
A functional interface is an interface that contains only one abstract method. They can have only one functionality to exhibit. From Java 8 onwards, lambda expressions can be used to represent the instance of a functional interface. A functional interface can have any number of default methods. Runnable, ActionListener, Comparable are some of the examples of functional interfaces.
Before Java 8, we had to create anonymous inner class objects or implement these interfaces.
(译文)函数式接口是一种仅包含一个抽象方法的接口。从Java8起,lambda表达式可以被用来实现函数式接口。一个函数式接口可以有多个default类型方法。函数式接口的例子有Runnable、ActionListener、Comparable等。
说明
函数式接口也被称为单抽象方法接口(SAM Interface),Java8之前通常以匿名内部类方式执行,现可以被隐式地转换为lambda表达式,即可用lambda表达式实行函数式接口,详情见下方用法举例。
Java8之前已有的函数式接口:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
Java8之前新增的函数式接口:
- java.util.function包下所有类都是Java8新增的
- java.util.function.Predicate举例
- 简介
- Predicate
接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果; - 该接口包含多种default方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非);
- 该接口用于测试对象是 true 或 false。
- Predicate
- 代码示例
1
2
- 简介
- java.util.function.Predicate举例
语法
1 |
|
简单用法举例
1 | public class LambdaTest { |
输出:
1 | Hi Test! |
函数接口示例
1 | import java.util.Arrays; |
输出:
1 | 输出所有数据: |
更多详细内容参见官方文档