android - 包含包含并按包含位置排序的字符串的过滤列表

标签 android sorting kotlin

我有字符串说的 list
var list = mutableListOf("clock", "kite", "rekt")
现在,我需要根据字符过滤列表。目前,我的筛选条件是:
list.filter { it.contains("k") }
它给我结果
[clock, kite, rekt]
但这是我有问题的地方,我想过滤列表并按其字符位置排序,并且预期结果是
[kite, rekt, clock]
字符“k”最先出现在列表中的第一位,依此类推。

我很困惑该怎么办。先感谢您。

最佳答案

要对其进行排序,必须使用Comparator。比较器合约在方法compare here中描述

比较其两个参数的顺序。如果参数相等,则返回零;如果第一个参数小于第二个参数,则返回负数;如果第一个参数大于第二个参数,则返回正数。

因此,在我们的情况下,我们采用两个字符串ab,我们看一下k出现在什么位置。

示例:

a = "clock" // position of 'k' is 4
b = "kite" // position of 'k' is 0

比较这两个4 - 0 = 4会得出一个正数,这意味着第一个参数大于第二个参数。
a = "kite" // position of 'k' is 0
b = "rekt" // position of 'k' is 3

比较这两个0 - 3 = -3会得出负数,这意味着第一个参数小于第二个参数。

代码:

var list = mutableListOf("clock", "kite", "rekt", "abcd")
list.retainAll { it.contains("k") }

// Ascending Order
list.sortWith(Comparator {a, b -> a.indexOf('k') - b.indexOf('k')})
println(list) // [kite, rekt, clock]

// Descending Order
list.sortWith(Comparator {a, b -> b.indexOf('k') - a.indexOf('k')})
println(list) // [clock, rekt, kite]

// Cleaner and more concise syntax thanks to @Tenfour04
list.sortWith( compareBy { it.indexOf('k') } )
list.sortWith( compareByDescending { it.indexOf('k') } )

关于android - 包含包含并按包含位置排序的字符串的过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61206940/

相关文章:

android - 无法使用 minSdk = 21 构建项目

java - Android 中的 GZIP

Java扫描器+排序

algorithm - MergeSort 给出 StackOverflow 错误

java - Android 通知永远不会显示

android - 通知未出现在使用 firebase 的应用程序的终止状态

javascript - 查找数组中大于右侧所有元素的整数

generics - 如何使 Kotlin 泛型方法静态化?

kotlin - 使用 Arrow-kt 验证对象

android - Genymotion 虚拟设备似乎正在运行,但似乎卡在引导中