You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++开发者如何在Java中实现存储返回double的二元函子的NavigableMap

Java实现方案

Java中对应你需求的泛型类型是函数式接口,针对你示例中「接收两个double参数、返回double值」的场景,直接使用JDK自带的java.util.function.DoubleBinaryOperator即可,它是专门为该场景设计的原始类型特化接口,没有装箱拆箱性能开销。

完整的实现逻辑如下:

  1. 声明NavigableMap时指定值的泛型为DoubleBinaryOperator,默认用TreeMap作为实现类
  2. 插入Lambda表达式时参数类型可以自动推断,无需显式声明
  3. 调用时需要调用接口的applyAsDouble方法触发执行,Java不支持C++那样的函数对象直接括号调用语法

可运行的完整代码示例:

import java.util.NavigableMap;
import java.util.TreeMap;
import java.util.function.DoubleBinaryOperator;

public class FunctionMapDemo {
    public static void main(String[] args) {
        NavigableMap<String, DoubleBinaryOperator> container = new TreeMap<>();
        
        // 插入函数实现
        container.put("add", (a, b) -> a + b);
        container.put("multiply", (a, b) -> a * b);
        container.put("max", Double::max); // 也可以直接传入方法引用
        
        // 调用执行
        double addResult = container.get("add").applyAsDouble(4, 6);
        System.out.println(addResult); // 输出10
        double multiplyResult = container.get("multiply").applyAsDouble(4, 6);
        System.out.println(multiplyResult); // 输出24
    }
}

如果你的场景需要支持不同的参数/返回值类型,可以使用通用的双参数函数式接口BiFunction<T, U, R>,其中T、U是两个入参的类型,R是返回值类型,只是会产生装箱拆箱的性能开销。

内容的提问来源于stack exchange,提问作者Miłosz Brzechczyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:27:03