如果返回值为基本类型,则用 To 表示,如 ToLongFunction 和 IntToLongFunction
如果返回值类型与参数类型一致,则是一个运算符
如果接收两个参数且返回值为布尔值,则是一个谓词(Predicate)
如果接收的两个参数类型不同,则名称中有一个 Bi
基本类型
下面枚举了基于 Lambda 表达式的所有不同 Function 变体的示例:
class Foo {}
class Bar {
Foo f;
Bar(Foo f) { this.f = f; }
}
class IBaz {
int i;
IBaz(int i) { this.i = i; }
}
class LBaz {
long l;
LBaz(long l) { this.l = l; }
}
class DBaz {
double d;
DBaz(double d) { this.d = d; }
}
public class FunctionVariants {
// 根据不同参数获得对象的函数表达式
static Function<Foo, Bar> f1 = f -> new Bar(f);
static IntFunction<IBaz> f2 = i -> new IBaz(i);
static LongFunction<LBaz> f3 = l -> new LBaz(l);
static DoubleFunction<DBaz> f4 = d -> new DBaz(d);
// 根据对象类型参数,获得基本数据类型返回值的函数表达式
static ToIntFunction<IBaz> f5 = ib -> ib.i;
static ToLongFunction<LBaz> f6 = lb -> lb.l;
static ToDoubleFunction<DBaz> f7 = db -> db.d;
static IntToLongFunction f8 = i -> i;
static IntToDoubleFunction f9 = i -> i;
static LongToIntFunction f10 = l -> (int)l;
static LongToDoubleFunction f11 = l -> l;
static DoubleToIntFunction f12 = d -> (int)d;
static DoubleToLongFunction f13 = d -> (long)d;
public static void main(String[] args) {
// apply usage examples
Bar b = f1.apply(new Foo());
IBaz ib = f2.apply(11);
LBaz lb = f3.apply(11);
DBaz db = f4.apply(11);
// applyAs* usage examples
int i = f5.applyAsInt(ib);
long l = f6.applyAsLong(lb);
double d = f7.applyAsDouble(db);
// 基本类型的相互转换
long applyAsLong = f8.applyAsLong(12);
double applyAsDouble = f9.applyAsDouble(12);
int applyAsInt = f10.applyAsInt(12);
double applyAsDouble1 = f11.applyAsDouble(12);
int applyAsInt1 = f12.applyAsInt(13.0);
long applyAsLong1 = f13.applyAsLong(13.0);
}
}
复制代码
以下是用表格整理基本类型相关的函数式接口:
函数式接口特征用途方法名Function接受一个参数,返回一个结果将输入参数转换成输出结果,如数据转换或映射操作R apply(T t)IntFunction接受一个 int 参数,返回一个结果将 int 值转换成输出结果R apply(int value)LongFunction接受一个 long 参数,返回一个结果将 long 值转换成输出结果R apply(long value)DoubleFunction接受一个 double 参数,返回一个结果将 double 值转换成输出结果R apply(double value)ToIntFunction接受一个参数,返回一个 int 结果将输入参数转换成 int 输出结果int applyAsInt(T value)ToLongFunction接受一个参数,返回一个 long 结果将输入参数转换成 long 输出结果long applyAsLong(T value)ToDoubleFunction接受一个参数,返回一个 double 结果将输入参数转换成 double 输出结果double applyAsDouble(T value)IntToLongFunction接受一个 int 参数,返回一个 long 结果将 int 值转换成 long 输出结果long applyAsLong(int value)IntToDoubleFunction接受一个 int 参数,返回一个 double 结果将 int 值转换成 double 输出结果double applyAsDouble(int value)LongToIntFunction接受一个 long 参数,返回一个 int 结果将 long 值转换成 int 输出结果int applyAsInt(long value)LongToDoubleFunction接受一个 long 参数,返回一个 double 结果将 long 值转换成 double 输出结果double applyAsDouble(long value)DoubleToIntFunction接受一个 double 参数,返回一个 int 结果将 double 值转换成 int 输出结果int applyAsInt(double value)DoubleToLongFunction接受一个 double 参数,返回一个 long 结果将 double 值转换成 long 输出结果long applyAsLong(double value)非基本类型