我有字符串说的 list var list = mutableListOf("clock", "kite", "rekt")
现在,我需要根据字符过滤列表。目前,我的筛选条件是:list.filter { it.contains("k") }
它给我结果[clock, kite, rekt]
但这是我有问题的地方,我想过滤列表并按其字符位置排序,并且预期结果是[kite, rekt, clock]
字符“k”最先出现在列表中的第一位,依此类推。
我很困惑该怎么办。先感谢您。
最佳答案
要对其进行排序,必须使用Comparator
。比较器合约在方法compare here中描述
比较其两个参数的顺序。如果参数相等,则返回零;如果第一个参数小于第二个参数,则返回负数;如果第一个参数大于第二个参数,则返回正数。
因此,在我们的情况下,我们采用两个字符串a
和b
,我们看一下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/