- 函数式接口是只包含一个方法的接口
- 可以通过
lambda
表达式来创建函数式接口的对象 - 在函数式接口上,可以使用
@FunctionalInterface
注解 - 以前用匿名实现类表示的,现在都可以用
lambda
表达式来实现
函数式接口定义:
@FunctionalInterface
public interface MyInterface {
void method1();
}
Java内置的四大和核心函数式接口:
-
Consumer<T>
,消费型接口参数类型:
T
返回类型:
void
用途:对类型为T的对象应用操作,包含一个方法
void accept(T t)
@Test public void consumerTest() { String param = "param"; consumer(param, str -> System.out.println("str = " + str)); } private void consumer(String str, Consumer<String> consumer) { consumer.accept(str); }
-
Supplier<T>
,供给型接口参数类型:无
返回类型:
T
用途:返回类型为T的对象,包含方法
T get()
@Test public void suppliedTest() { String uuid = supplied(() -> UUID.randomUUID().toString()); System.out.println("uuid = " + uuid); } private String supplied(Supplier<String> supplier) { return supplier.get(); }
-
Function<T,R>
,函数型接口参数类型:
T
返回类型:
R
用途:对类型为
T
的对象应用操作,并返回R
类型的对象,包含方法:R apply(T t)
@Test public void functionTest() { int num = 1; String result = function(num, param -> "num = " + param); System.out.println(result); } private String function(Integer num, Function<Integer, String> function) { return function.apply(num); }
-
Predicate<T>
,断定型接口参数类型:
T
返回类型:
boolean
用途:确定类型为
T
的对象是否满足某约束,并返回Boolean
值,包含方法:boolean test(T t)
@Test public void predicateTest() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i); } List<Integer> resultList = predicate(list, num -> num % 2 == 0); System.out.println(resultList); } private List<Integer> predicate(List<Integer> list, Predicate<Integer> predicate) { List<Integer> resultList = new ArrayList<>(); for (Integer num : list) { if (!predicate.test(num)) { continue; } resultList.add(num); } return resultList; }
其他接口:
-
BiFunction<T,U,R>
参数类型:
T
,U
返回类型:
R
用途:对类型为
T
,U
参数应用操作,返回R
类型的结果。包含方法R apply(T t, U u)
-
UnaryOperator<T>
参数类型:
T
返回类型:
T
用途:Function的子接口,对类型为T的对象进行一元运算,并返回T类型的结果。包含方法为
T apply(T t)
-
BinaryOperator
参数类型:
T
,T
返回类型:
T
用途:
Function
的子接口,对类型为T
的对象进行二元运算,并返回T
类型的结果。包含方法为T apply(T t1, T t2)
-
BiConsumer<T,U>
参数类型:T,U
返回类型:void
用途:对类型为T,U参数应用操作,包含方法
void accept(T t, U u)
-
BiPredicate<T,U>
参数类型:
T
,U
返回类型:
Boolean
用途:对类型为
T
,U
参数进行判断,包含方法boolean test(T t, U u)
-
ToIntFunction<T>
-
ToLongFunction<T>
-
ToDoubleFunction<T>
参数类型:
T
返回类型:
int
,long
,double
用途:分别计算
int
、long
、double
值的函数 -
IntFunction<R>
-
LongFunction<R>
-
DoubleFunction<R>
参数类型:
int
,long
,double
返回类型:
R
用途:参数类型分别为
int
、long
、double
的函数