java8 新特性 -- 函数接口
函数接口:一个接口,一个抽象方法,构成了函数接口,可以加注解@FunctionalInterface
指定约束该接口为函数接口;函数接口只能有一个自己的抽象方法
简单使用:
自定义函数接口: 定义了三个函数接口
package com.xiaodu.java8.methodcite;
import java.util.function.Supplier;
/**
* 定义函数接口
* @author 84287
*
*/
public interface FunctionInterface {
/*
* 获取类的实例
*/
@FunctionalInterface
interface function01<T>{
T getObject();
}
//函数接口是主要是给Lambda使用 java8中已经有好多函数接口,很多不用自己定义
//本人自己定义的function01<t> 其实和 java.util.function中的Supplier<T>一样的
}
使用函数接口:
public static void main(String[] args) {
function01<String> f01 = () -> "xiaoming";
String string = f01.getObject();
System.out.println(string.length()); // 8
}
java 8 中自带的函数接口大全:
JDK 1.8之前已有的函数式接口:
· 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
---------------------
java.util.function.* 下的函数接口
序号 | 接口名 && 抽象方法 | 备注 |
---|---|---|
1 | BiConsumer<T,U> ; void accept(T t, U u); |
代表了一个接受两个输入参数的操作,并且不返回任何结果 |
2 | BiFunction<T,U,R>; R apply(T t, U u); |
代表了一个接受两个输入参数的方法,并且返回一个结果 |
3 | BinaryOperator<T>; 继承BiFunction<T,U,R>; |
代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 |
4 | BiPredicate<T,U>; boolean test(T t, U u); |
代表了一个两个参数的返回boolean值方法 |
5 | BooleanSupplier | 代表了boolean值结果的提供方 |
6 |
Consumer<T>; void accept(T t); |
代表了接受一个输入参数并且无返回的操作 |
7 | DoubleBinaryOperator; double applyAsDouble(double left, double right); |
代表了作用于两个double值操作符的操作,并且返回了一个double值的结果 |
8 | DoubleConsumer; void accept(double value); |
代表一个接受double值参数的操作,并且不返回结果 |
9 | DoubleFunction<R>; R apply(double value); |
代表接受一个double值参数的方法,并且返回结果 |
10 | DoublePredicate; boolean test(double value); |
代表一个拥有double值参数的返回boolean值方法 |
11 | DoubleSupplier; double getAsDouble(); |
代表一个无参,返回double值的方法 |
12 | DoubleToIntFunction; int applyAsInt(double value); |
接受一个double类型输入,返回一个int类型结果 |
13 | DoubleToLongFunction; long applyAsLong(double value); |
接受一个double类型输入,返回一个long类型结果 |
14 | DoubleUnaryOperator; double applyAsDouble(double operand); |
接受一个参数同为类型double,返回值类型也为double。 |
15 | Function<T,R>; R apply(T t); |
接受一个输入参数,返回一个结果 |
16 | IntBinaryOperator; int applyAsInt(int left, int right); |
接受两个参数同为类型int,返回值类型也为int |
17 | IntConsumer; void accept(int value); |
接受一个int类型的输入参数,无返回值 |
18 | IntFunction<R>; R apply(int value); |
接受一个int类型输入参数,返回一个结果 |
19 | IntPredicate; boolean test(int value); |
接受一个int输入参数,返回一个布尔值的结果 |
20 | IntSupplier; int getAsInt(); |
无参数,返回一个int类型结果 |
21 | IntToDoubleFunction; double applyAsDouble(int value); |
接受一个int类型输入,返回一个double类型结果 |
22 | IntToLongFunction; long applyAsLong(int value); |
接受一个int类型输入,返回一个long类型结果 |
23 | IntUnaryOperator; int applyAsInt(int operand); |
接受一个参数同为类型int,返回值类型也为int |
24 | LongBinaryOperator; long applyAsLong(long left, long right); |
接受两个参数同为类型long,返回值类型也为long |
25 | LongConsumer; void accept(long value); |
接受一个long类型的输入参数,无返回值 |
26 | LongFunction<R>; void accept(long value); |
接受一个long类型输入参数,返回一个结果 |
27 | LongPredicate; boolean test(long value); |
接受一个long输入参数,返回一个布尔值类型结果 |
28 | LongSupplier; long getAsLong(); |
无参数,返回一个结果long类型的值 |
29 | LongToDoubleFunction; double applyAsDouble(long value); |
接受一个long类型输入,返回一个double类型结果 |
30 | LongToIntFunction; int applyAsInt(long value); |
接受一个long类型输入,返回一个int类型结果 |
31 | LongUnaryOperator; long applyAsLong(long operand); |
接受一个参数同为类型long,返回值类型也为long |
32 | ObjDoubleConsumer<T>; void accept(T t, double value); |
接受一个object类型和一个double类型的输入参数,无返回值 |
33 | ObjIntConsumer<T>; void accept(T t, int value); |
接受一个object类型和一个int类型的输入参数,无返回值 |
34 | ObjLongConsumer<T>; void accept(T t, long value); |
接受一个object类型和一个long类型的输入参数,无返回值 |
35 | Predicate<T>; boolean test(T t); |
接受一个输入参数,返回一个布尔值结果 |
36 | Supplier<T>; T get(); |
无参数,返回一个结果 |
37 | ToDoubleBiFunction<T,U>; double applyAsDouble(T t, U u); |
接受两个输入参数,返回一个double类型结果 |
38 | ToDoubleFunction<T>; double applyAsDouble(T value); |
接受一个输入参数,返回一个double类型结果 |
39 | ToIntBiFunction<T,U>; int applyAsInt(T t, U u); |
接受两个输入参数,返回一个int类型结果 |
40 | ToIntFunction<T>; int applyAsInt(T value); |
接受一个输入参数,返回一个int类型结果 |
41 | ToLongBiFunction<T,U>; long applyAsLong(T t, U u); |
接受两个输入参数,返回一个long类型结果。 |
42 | ToLongFunction<T>; long applyAsLong(T value); |
接受一个输入参数,返回一个long类型结果 |
43 | UnaryOperator<T>; 继承: extends Function<T, T>; R apply(T t); |
接受一个参数为类型T,返回值类型也为T |
44 | 以上是java8 之后又的函数接口 |
简单使用java8中自带的函数接口
代码体现:
使用java8自带的函数接口
public static void main(String[] args) {
String string = MethodCiteFunction.supplier(() -> "接受一个空参,返回一个String对象");
System.out.println(string);
// 空参,返回一个person对象
Person person = MethodCiteFunction.supplier(() -> new Person());
// 方法引用,空参返回一个person对象
Person person2 = MethodCiteFunction.supplier(Person::new);
}
/**
* Supplier<T> 无参,返回一个泛型类型的对象
* @param supplier
* @return
*/
public static <T>T supplier(Supplier<T> supplier) {
return supplier.get();
}