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

标签 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;

我该怎么做

与谓词相同,我如何对单个对象进行谓词

最佳答案

只需调用Function.apply即可。

final int applied = powerOfTwo.apply(i);

一个Function is simply an interface定义一个方法:

T apply(F input)

您的 powerOfTwo 只是一个 anonymous class实现函数接口(interface)

对于谓词也是如此。

请注意,在 Java 8 中,有一个 whole host of Function types使用 lambda 表达式,您的代码将变为:

Function<Integer, Integer> powerOfTwo = i -> i * i;

或者,使用 int 版本(这样您就不会自动装箱为 Integer):

IntFunction powerOfTwo = i -> i * i;

你问我也可以链式吗?。 Java 7 中的答案是:不会。由于 Guava Function interface 仅定义了一种方法,因此它无法提供该功能。您需要使用 Functions实用程序类为 compose多种功能:

Function<Integer, Integer> composed = Functions.compose(powerOfTwo, powerOfTwo);

对于 Java 8,由于 default method Function 接口(interface)实际上可以提供大量功能,同时仍然只有一个 abstract 方法。因此在 Java 8 中你可以这样做:

Function<Integer, Integer> composed = powerOfTwo.compose(powerOfTwo);

或者甚至:

Function<Integer, Integer> composed = powerOfTwo.compose(i -> i + 2);

关于java - 函数 Guava 在单个对象上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31020057/

相关文章:

java - 如果我让 Java 程序过夜,我会在 java.exe 中收到异常进程终止错误

java - 使用 Guava Joiner 连接数组并包装每个元素

java - 将spymemcached Java 客户端GetFuture 适配为Guava ListenableFuture

java - 为 Guava Cache 选择键

java - 生成等号和哈希码时忽略属性

java - 类型传递/更改

Java AES GCM 标签不匹配

java - 如何调试使用 Docker Compose 运行的 Glassfish 应用程序

java - JSP Java io.common 上传文件问题

java - 是否有与 Apache Commons Collections 中的 ArrayIterator 通用的等价物?