为了熟练使用和记忆,按照这个规则记忆就可以。
函数式接口四大类型:
1.消费型
给一个入参,没有返回值
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
扩展:
- BiConsumer<T, U> 消费两个值
- DoubleConsumer 参数类型为double
- IntConsumer 参数类型为int
- LongConsumer 参数类型为long
- ObjDoubleConsumer
第一个参数为T,第二个为double - ObjIntConsumer
第一个参数为T,第二个为int - ObjLongConsumer
第一个参数为T,第二个为long
2.供给型
没有入参,有一个返回值
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
扩展:
- BooleanSupplier 返回boolean
- DoubleSupplier 返回 double
- IntSupplier 返回 int
- LongSupplier 返回 long
3.判断型
返回结果是布尔值
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
扩展:
- BiPredicate<T, U> 两个入参
- DoublePredicate 一个double类型的入参
- IntPredicate 一个int类型的参数
- LongPredicate 一个long类型的参数
4.功能型
一个入参一个返回值。可以内部做逻辑,也是用的最多的。
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
扩展:
- UnaryOperator
extends Function<T, T> 只有一个参数的,入参和返回都是同样的类型
例如:- LongUnaryOperator、
- IntUnaryOperator、
- DoubleUnaryOperator
- BiFunction<T, U, R> 两个入参,一个返回值
- DoubleFunction
一个double类型的入参,T返回类型 - IntFunction
- LongFunction
这些都是T类型的返回值,不同的入参类型 - 以下就是具体的类型:
- IntToDoubleFunction 入参int转double
- IntToLongFunction
- DoubleToLongFunction
- DoubleToIntFunction
- LongToIntFunction
- LongToDoubleFunction
这些都是具体的类型转换了
特例:BinaryOperator