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

如何在Kotlin中按字符'e'的出现频率对ArrayList进行特定排序?

按字符'e'的出现频率排序ArrayList的解决方法

嗨,我来帮你搞定这个排序需求!你遇到的问题是因为默认的Collections.sort()只会按照字符串的自然字典序排序,没法实现你要的按特定字符出现次数排序的逻辑。不过在Kotlin里,我们有很多灵活的方式来实现自定义排序,下面给你几种实用的方案:

1. 使用Kotlin扩展函数sortBy(修改原集合)

这是最简洁的方式,直接在原ArrayList上调用sortBy,传入一个lambda来计算每个字符串中'e'的出现次数:

// 初始化你的列表
val a = arrayListOf("eat", "animal", "internet")
// 按'e'的出现次数升序排序
a.sortBy { str -> str.count { char -> char == 'e' } }

// 现在a的内容就是:["animal", "eat", "internet"]

sortBy会直接修改原集合的顺序,非常高效。

2. 使用sortedBy生成新集合(不修改原列表)

如果你不想改动原来的ArrayList,想要生成一个全新的排序后的集合,可以用sortedBy,它会返回一个新的List,之后你可以转成ArrayList:

val originalList = arrayListOf("eat", "animal", "internet")
// 生成排序后的新列表
val sortedList = ArrayList(originalList.sortedBy { it.count { it == 'e' } })

// sortedList的内容就是你想要的顺序

3. 兼容Java的Collections.sort方案(带自定义比较器)

如果你坚持想用Collections.sort,也可以通过传入自定义的Comparator来实现逻辑:

val a = arrayListOf("eat", "animal", "internet")
Collections.sort(a) { s1, s2 ->
    // 分别计算两个字符串中'e'的数量
    val eCount1 = s1.count { it == 'e' }
    val eCount2 = s2.count { it == 'e' }
    // 按数量升序比较
    eCount1.compareTo(eCount2)
}

额外补充:多条件排序

如果遇到两个字符串'e'的出现次数相同的情况,你还可以添加第二排序条件(比如按字符串字典序),用sortedWith和compareBy组合:

val sortedList = originalList.sortedWith(compareBy(
    { it.count { char -> char == 'e' } }, // 第一条件:'e'的数量升序
    { it } // 第二条件:字符串字典序升序
))

这样就能更精细地控制排序结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:28:33