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

Kotlin泛型Tree的add函数compare参数如何传参

Kotlin泛型Tree的add方法compare参数传入说明

方法完整实现如下:

fun add ( value : A, compare : (A, A) -> Int ) : Tree <A> =
    when (this) {
        is Empty -> treeNode(value)
        is Node -> if (compare(value,this.value) < 1) {
            treeNode(this.value,left.add(value,compare),right)
        } else{
            treeNode(this.value,left,right.add(value,compare))
        }
    }

compare参数规则

第二个参数是接收两个A类型参数、返回Int值的比较函数,返回值遵循通用比较器约定:

  • 第一个参数小于第二个参数时,返回负整数
  • 第一个参数等于第二个参数时,返回0
  • 第一个参数大于第二个参数时,返回正整数

结合方法逻辑,当compare(新插入值, 当前节点值) < 1时,新值会被插入到左子树,否则插入到右子树,默认遵循左小右大的排序逻辑。

调用示例

以你提到的tree.add(5, ?)场景(此时泛型A为Int类型),第二个参数有以下几种常见传法:

  • 传Lambda表达式实现自然升序(Kotlin语法支持:如果Lambda是方法的最后一个参数,可以移到括号外部)
// 按数值从小到大排序,小值存左子树,大值存右子树
tree.add(5) { a, b -> a - b }
  • 如果需要降序排序,反转比较逻辑即可
// 按数值从大到小排序,大值存左子树,小值存右子树
tree.add(5) { a, b -> b - a }
  • 传已有函数引用,比如Int类型自带的compareTo方法
tree.add(5, Int::compareTo)

如果Tree存储的是自定义类型,只需在Lambda中实现对应字段的比较逻辑即可,比如存储User对象按年龄排序:

data class User(val age: Int, val name: String)
val userTree: Tree<User> = Empty()
userTree.add(User(22, "Jack")) { a, b -> a.age - b.age }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.05 07:39:26