看起来很简单,但我没有找到如何在单个对象上应用函数形式guava api的解释
例如我有以下功能
Function<Integer, Integer> powerOfTwo = new Function<Integer, Integer>() {
@Override
public Integer apply(Integer input) {
return (int) Math.pow(input, 2);
}
};
我想在
上应用它整数i = 6;
我该怎么做
相同的谓词如何在单个对象上进行谓词
答案 0 :(得分:3)
Function.apply
。final int applied = powerOfTwo.apply(i);
定义一种方法的Function
is simply an interface
:
T apply(F input)
您的powerOfTwo
只是一个实现Function
interface
的{{3}}。
Predicate
也是如此。
请注意,在Java 8中,有一个anonymous class
,并且您的代码变为lambdas:
Function<Integer, Integer> powerOfTwo = i -> i * i;
或者,使用int
版本(这样您就不会将自动装箱放到Integer
):
IntFunction powerOfTwo = i -> i * i;
你问我可以连锁吗?。答案是在Java 7中,没有。因为Guava Function
interface
只定义了一种方法,所以它无法提供该功能。您需要使用whole host of Function
types实用程序类来Functions
多个函数:
Function<Integer, Integer> composed = Functions.compose(powerOfTwo, powerOfTwo);
使用Java 8,由于compose
Function
接口实际上可以提供大量功能,同时仍然只有一个abstract
方法。因此,在Java 8中,您可以这样做:
Function<Integer, Integer> composed = powerOfTwo.compose(powerOfTwo);
甚至:
Function<Integer, Integer> composed = powerOfTwo.compose(i -> i + 2);