Function接口
Function接口在java中主要用来转换类型
通过调用apply方法将T类型转换为R类型
抽象方法:apply
R apply(T var1);
代码样例
public class Main {
public static void main(String[] args) {
String str = "13523";
Integer i = test(str, (t) -> {
return Integer.parseInt(str);
});
System.out.println("i的value: " + i);
}
public static <T, R> R test(T t, Function<T, R> f) {
return f.apply(t);
}
}
输出结果
i的value: 13523
default方法:andThen
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (t) -> {
return after.apply(this.apply(t));
};
}
代码样例
public class Main {
public static void main(String[] args) {
Function<String, Integer> f1 = (t) -> {
return Integer.parseInt(t);
};
Function<Integer, String> f2 = (t) -> {
return String.valueOf(t);
};
String str = "13523";
String str1 = test(str, f1.andThen(f2));
System.out.println("str1的value: " + str1);
}
public static <T, R> R test(T t, Function<T, R> f) {
return f.apply(t);
}
}
输出结果
str1的value: 13523
String -> Integer -> String
default方法:compose
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (v) -> {
return this.apply(before.apply(v));
};
}
与andThen刚好相反,先根据入参Function执行类型转换,然后再根据当前Function执行类型转换。
代码样例
public class Main {
public static void main(String[] args) {
Function<String, Integer> f1 = (t) -> {
return Integer.parseInt(t);
};
Function<Integer, String> f2 = (t) -> {
return String.valueOf(t);
};
Integer i = 13523;
Integer i1 = test(i, f1.compose(f2));
System.out.println("i1的value: " + i1);
}
public static <T, R> R test(T t, Function<T, R> f) {
return f.apply(t);
}
}
输出结果
i1的value: 13523
Integer -> String -> Integer
其他方法
static <T> Function<T, T> identity() {
return (t) -> {
return t;
};
}
- identity:返回一个和输入类型相同的输出类型。