首页 > 解决方案 > 如何传递一个接受浮点数并将浮点数返回给另一个函数的函数?

问题描述

我正在尝试在 Java 中的一个类上编写一个“映射”函数。如何传递一个带浮点数的函数并将浮点数返回给另一个函数?像这样的东西:

void map( MapFn fn ) 
{
    for ( int  i = 0 ; i < this.rows; ++i ) 
    {
        for ( int  j = 0 ; j < this.cols; ++j ) 
        {
            this.inner[i][j] = fn(this.inner[i][j])
        }
    }
}

标签: javafunctionpointers

解决方案


正如@boly38 在评论中所建议的那样,这个java.util.function包是你的朋友(或者一般来说只是功能接口/lambdas)。例如,它提供DoubleUnaryOperator类。接受 this 的实例作为您的方法参数并使用该applyAsDouble()方法将(有效地)执行您想要的操作。

但是,没有专门提供float。如果您需要一个,您可以随时定义自己的:

@FunctionalInterface
public interface FloatUnaryOperator {
    float applyAsFloat(float in);
}

所以让你的方法是:

public void doThing(final DoubleUnaryOperator mapper) {
    for (final double d : someArray) {
        System.out.println(mapper.applyAsDouble(d));
    }
}

这些实例可以通过 lambdas(或任何其他方式)创建,例如f -> f * 2.0f;(这将使任何给定的 加倍float)。


推荐阅读