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
用于 double
,Integer
用于 int
等.)
如果您需要超过 2 个参数(例如 TriFunction
),那么您需要创建自己的接口,因为 Java 标准库提供的不多于此(它是不像 C++ 那样可扩展)。
至于调用方式:
// Expected to be 10.
double result = container.get("add").apply(4.0, 6.0);
我来自 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
用于 double
,Integer
用于 int
等.)
如果您需要超过 2 个参数(例如 TriFunction
),那么您需要创建自己的接口,因为 Java 标准库提供的不多于此(它是不像 C++ 那样可扩展)。
至于调用方式:
// Expected to be 10.
double result = container.get("add").apply(4.0, 6.0);