函数Guava在单个对象上应用函数

时间:2015-06-24 07:13:25

标签: java guava

看起来很简单,但我没有找到如何在单个对象上应用函数形式guava api的解释

例如我有以下功能

Function<Integer, Integer> powerOfTwo = new Function<Integer, Integer>() {
    @Override
    public Integer apply(Integer input) {
        return (int) Math.pow(input, 2);
    }
};

我想在

上应用它

整数i = 6;

我该怎么做

相同的谓词如何在单个对象上进行谓词

1 个答案:

答案 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);