Java - NavigableMap,returns 一个仿函数,returns 一个双精度函数

Java - NavigableMap, which returns a functor, which returns a double

我来自 C++,我感到有点沮丧和困惑。我在谷歌上搜索了一段时间,但仍然找不到答案,所以我来了。

我如何在 Java 中实现一个 NavigableMap<String, ?>,其中问号处是一个可以用两个参数调用的对象,然后 return 一个值。

我希望它看起来像这样:

NavigableMap<String, SomeFunctorClass> container;

// I also don't know how to write a lambda thing in java, so it won't work.
// [](double a, double b) -> double { return a + b; } // in C++
container.put("add", (double a, double b) -> { return a + b; });

// Expected to be 10.
double result = container.get("add")(4, 6);

开箱即用的最接近 Java 的可能是 BiFunction

您仍然无法像在 C++ 函子上那样直接使用 () 调用它,但您可以调用它的 apply 方法:

NavigableMap<String, BiFunction<Double, Double, Double>> container = new TreeMap<>();
container.put("add", (a, b) -> a + b);
double result = container.get("add").apply(4.0, 6.0);

java 中的等价物是 BiFunction:

NavigableMap<String, BiFunction<Double, Double, Double>> container;
container.put("add", (a, b) -> a + b);

请注意 Java 中的泛型不能是原始的,因此您应该使用盒装版本(Double 用于 doubleInteger 用于 int 等.)

如果您需要超过 2 个参数(例如 TriFunction),那么您需要创建自己的接口,因为 Java 标准库提供的不多于此(它是不像 C++ 那样可扩展)。

至于调用方式:

// Expected to be 10.
double result = container.get("add").apply(4.0, 6.0);