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

为何Function::apply可作为BiFunction传入Seq.zip方法?

为什么Function::apply能适配BiFunction参数?

先明确当前代码的泛型上下文:

  • 调用zip的seq是Seq<UnaryOperator<String>>,因此zip方法的泛型参数T为UnaryOperator<String>(UnaryOperator是Function的子接口)
  • split是List<String>,所以zip的U为String
  • 最终返回Seq<String>,因此zip要求的BiFunction具体类型是:
    BiFunction<UnaryOperator<String>, String, String>
    

Function::apply的适配逻辑

Function::apply是实例方法的方法引用,它能被适配成BiFunction类型,本质等价于以下Lambda表达式:

(UnaryOperator<String> func, String input) -> func.apply(input)

这种适配的核心原因是Java方法引用的特殊规则:
当上下文需要一个接收两个参数的函数式接口时,实例方法的方法引用可以被解读为:

  • 第一个参数作为调用该实例方法的对象
  • 第二个参数作为实例方法的入参
  • 最终返回实例方法的执行结果

放到当前场景中:

  1. 第一个参数func是UnaryOperator<String>(属于Function子类,拥有apply方法)
  2. 第二个参数input是String,作为func.apply的入参
  3. func.apply(input)返回String,完全匹配BiFunction<UnaryOperator<String>, String, String>的方法签名。

实际执行效果

在zip方法的逻辑中,会逐个配对seq中的操作符与split中的字符串:

  • 第一个操作符是String::toLowerCase,对应split的第一个字符串,执行后将首段字符串转为全小写
  • 后续操作符都是capitalize,对应split的后续字符串,执行后将每个单词首字母大写、其余字母小写
  • 最终通过join("")拼接所有处理后的字符串,完成下划线到驼峰的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:32