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

如何修改Function<T,R>参数类型?实现int[]到Integer[]的函数适配

解决Function<int[], Integer>到Function<Integer[], Integer>的适配问题

首先明确:你无法修改java.util.function.Function<T,R>接口本身的类型参数,但可以通过包装转换实现类型适配,把Function<int[], Integer>转换成符合integerMap要求的Function<Integer[], Integer>。

核心思路很简单:在包装函数内部,把传入的Integer[]数组拆箱为int[],再调用原函数即可。因为Java不会自动在Integer[]和int[]之间做转换,所以需要手动处理这个步骤。

完整实现代码

import java.util.function.Function;

public class FunctionAdapter {

    public static Integer integerMap(Function<Integer[], Integer> integerFun, Integer[] integerArr) {
        return integerFun.apply(integerArr);
    }

    public static void main(String[] args) {
        // 示例:定义一个接收int[]的函数,计算数组元素总和
        Function<int[], Integer> intArraySumFunc = arr -> {
            int sum = 0;
            for (int num : arr) {
                sum += num;
            }
            return sum;
        };

        // 实现类型适配的包装函数
        Function<Function<int[], Integer>, Function<Integer[], Integer>> funWrap = intFunc -> {
            // 返回适配后的Function,接收Integer[]并转成int[]调用原函数
            return integerArr -> {
                // 将Integer[]拆箱为int[]
                int[] intArr = new int[integerArr.length];
                for (int i = 0; i < integerArr.length; i++) {
                    // 处理可能的空值,可根据业务调整逻辑(比如抛出异常)
                    intArr[i] = integerArr[i] != null ? integerArr[i] : 0;
                }
                return intFunc.apply(intArr);
            };
        };

        // 适配后调用integerMap方法
        Integer[] testArr = {1, 2, 3, 4};
        Integer result = integerMap(funWrap.apply(intArraySumFunc), testArr);
        System.out.println(result); // 输出10
    }
}

关键点说明

  • 完全不需要操作byte[],这是多余的步骤。我们只需要处理Integer[]到int[]的元素拆箱转换即可。
  • 注意空值处理:如果原Integer[]数组中存在null,直接拆箱会抛出NullPointerException,代码中做了简单的空值转0处理,你可以根据实际业务需求调整(比如抛出自定义异常)。
  • 这个包装逻辑是通用的,任何Function<int[], R>类型的函数都可以通过该方式适配为Function<Integer[], R>。

内容的提问来源于stack exchange,提问作者madMax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:15:30