函數(shù)式接口
函數(shù)式接口本質(zhì)是一個接口,但是他是一個只有一個抽象方法的特殊接口。也稱作SAM接口,即Single Abstract Method interfaces。舉一個常舉的例子:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
default Predicate<T> negate() {
return (t) -> !test(t);
}
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
函數(shù)接口可以(可以而不是必須)采用@FunctionalInterface 注解,
可以包涵以下成員:
- 用default 定義的默認方法,默認方法不是抽象的,其包涵一個默認實現(xiàn)。(也就是有方法體)
- 用static 定義的靜態(tài)方法,靜態(tài)方法是一個已經(jīng)實現(xiàn)了的方法,不是抽象方法。
- Object類自帶的方法,如toString,equals等方法。
必須包含以下
必須有一個抽象方法。因為函數(shù)接口本質(zhì)是接口,所以不需要abstract修飾。
函數(shù)接口的繼承,函數(shù)接口也可以繼承,但是無論繼承幾個接口,繼承后的函數(shù)接口必須只有一個抽象方法(這個方法可以是定義在自己,也可以是繼承自父接口),如果有多個,那么這個接口就不是函數(shù)接口。
編寫的時候如果加入@FunctionalInterface有助于編譯檢查,不符合以上條件的函數(shù)接口是會報錯的。
@FunctionalInterface
public interface PczhuFunctionInterface {
int pczhu(int a);
}
可以普通實現(xiàn):
PczhuFunctionInterface pczhuFunctionInterfaceimpl = new PczhuFunctionInterface() {
@Override
public int pczhu(int a) {
return a + 5;
}
};
也可以用lambda表達式
PczhuFunctionInterface pczhuFunctionInterfaceImpl = a -> a + 5;
JDK 1.8 新增加的函數(shù)接口:(表格取材位置:http://blog.csdn.net/yangjiachang1203/article/details/52619795)
序號 | 說明 |
---|---|
1 | BiConsumer<T,U> |
代表了一個接受兩個輸入?yún)?shù)的操作,并且不返回任何結(jié)果 | |
2 | BiFunction<T,U,R> |
代表了一個接受兩個輸入?yún)?shù)的方法,并且返回一個結(jié)果 | |
3 | BinaryOperator<T> |
代表了一個作用于于兩個同類型操作符的操作,并且返回了操作符同類型的結(jié)果 | |
4 | BiPredicate<T,U> |
代表了一個兩個參數(shù)的boolean值方法 | |
5 | BooleanSupplier |
代表了boolean值結(jié)果的提供方 | |
6 | Consumer<T> |
代表了接受一個輸入?yún)?shù)并且無返回的操作 | |
7 | DoubleBinaryOperator |
代表了作用于兩個double值操作符的操作,并且返回了一個double值的結(jié)果。 | |
8 | DoubleConsumer |
代表一個接受double值參數(shù)的操作,并且不返回結(jié)果。 | |
9 | DoubleFunction<R> |
代表接受一個double值參數(shù)的方法,并且返回結(jié)果 | |
10 | DoublePredicate |
代表一個擁有double值參數(shù)的boolean值方法 | |
11 | DoubleSupplier |
代表一個double值結(jié)構(gòu)的提供方 | |
12 | DoubleToIntFunction |
接受一個double類型輸入,返回一個int類型結(jié)果。 | |
13 | DoubleToLongFunction |
接受一個double類型輸入,返回一個long類型結(jié)果 | |
14 | DoubleUnaryOperator |
接受一個參數(shù)同為類型double,返回值類型也為double 。 | |
15 | Function<T,R> |
接受一個輸入?yún)?shù),返回一個結(jié)果。 | |
16 | IntBinaryOperator |
接受兩個參數(shù)同為類型int,返回值類型也為int 。 | |
17 | IntConsumer |
接受一個int類型的輸入?yún)?shù),無返回值 。 | |
18 | IntFunction<R> |
接受一個int類型輸入?yún)?shù),返回一個結(jié)果 。 | |
19 | IntPredicate |
:接受一個int輸入?yún)?shù),返回一個布爾值的結(jié)果。 | |
20 | IntSupplier |
無參數(shù),返回一個int類型結(jié)果。 | |
21 | IntToDoubleFunction |
接受一個int類型輸入,返回一個double類型結(jié)果 。 | |
22 | IntToLongFunction |
接受一個int類型輸入,返回一個long類型結(jié)果。 | |
23 | IntUnaryOperator |
接受一個參數(shù)同為類型int,返回值類型也為int 。 | |
24 | LongBinaryOperator |
接受兩個參數(shù)同為類型long,返回值類型也為long。 | |
25 | LongConsumer |
接受一個long類型的輸入?yún)?shù),無返回值。 | |
26 | LongFunction<R> |
接受一個long類型輸入?yún)?shù),返回一個結(jié)果。 | |
27 | LongPredicate |
R接受一個long輸入?yún)?shù),返回一個布爾值類型結(jié)果。 | |
28 | LongSupplier |
無參數(shù),返回一個結(jié)果long類型的值。 | |
29 | LongToDoubleFunction |
接受一個long類型輸入,返回一個double類型結(jié)果。 | |
30 | LongToIntFunction |
接受一個long類型輸入,返回一個int類型結(jié)果。 | |
31 | LongUnaryOperator |
接受一個參數(shù)同為類型long,返回值類型也為long。 | |
32 | ObjDoubleConsumer<T> |
接受一個object類型和一個double類型的輸入?yún)?shù),無返回值。 | |
33 | ObjIntConsumer<T> |
接受一個object類型和一個int類型的輸入?yún)?shù),無返回值。 | |
34 | ObjLongConsumer<T> |
接受一個object類型和一個long類型的輸入?yún)?shù),無返回值。 | |
35 | Predicate<T> |
接受一個輸入?yún)?shù),返回一個布爾值結(jié)果。 | |
36 | Supplier<T> |
無參數(shù),返回一個結(jié)果。 | |
37 | ToDoubleBiFunction<T,U> |
接受兩個輸入?yún)?shù),返回一個double類型結(jié)果 | |
38 | ToDoubleFunction<T> |
接受一個輸入?yún)?shù),返回一個double類型結(jié)果 | |
39 | ToIntBiFunction<T,U> |
接受兩個輸入?yún)?shù),返回一個int類型結(jié)果。 | |
40 | ToIntFunction<T> |
接受一個輸入?yún)?shù),返回一個int類型結(jié)果。 | |
41 | ToLongBiFunction<T,U> |
接受兩個輸入?yún)?shù),返回一個long類型結(jié)果。 | |
42 | ToLongFunction<T> |
接受一個輸入?yún)?shù),返回一個long類型結(jié)果。 | |
43 | UnaryOperator<T> |
接受一個參數(shù)為類型T,返回值類型也為T。 |