kotlin按startsWith()排序的stings列表

kotlin按startsWith()排序的stings列表,kotlin,Kotlin,是否有任何方法可以按startsWith()对列表进行排序,例如使用字符串列表、执行搜索以及所有以query开头的结果都将位于列表的顶部 一种方法是: val filteredList = list.filter { it.startsWith(query, true) } + list.filterNot { it.startsWith(query, true) } 但是没有看到它的有效性您可以使用sortedBy,它对布尔值有效,但首先是假值: val list=l

是否有任何方法可以按startsWith()对列表进行排序,例如使用字符串列表、执行搜索以及所有以query开头的结果都将位于列表的顶部

一种方法是:

    val filteredList = list.filter { it.startsWith(query, true) } +
        list.filterNot { it.startsWith(query, true) }

但是没有看到它的有效性

您可以使用
sortedBy
,它对布尔值有效,但首先是假值:

val list=listOf(“nope”、“abc”、“abcd”、“bacon”、“abba”、“bob”、“某物”)
val sorted=list.sortedBy{it.startsWith(“ab”,ignoreCase=true)}
println(排序)/[不,培根,鲍勃,什么,abc,abcd,abba]
如果您首先想要真值,可以使用
操作员内部<代码>由
分拣

请注意,如果您也需要这两个子列表,则可以使用
分区
而不是对
过滤器
进行两次调用,这样每个项目只测试一次:

val list=listOf(“nope”、“abc”、“abcd”、“bacon”、“abba”、“bob”、“某物”)
val(matchingItems,nonMatchingItems)=list.partition{it.startsWith(“ab”,ignoreCase=true)}
println(匹配项)/[abc、abcd、abba]
println(非匹配项)/[不,培根,鲍勃,什么的]

关于效率:在复杂性分析方面,分区比任何排序都更有效(至少在时间复杂性方面)。因为分区是O(n),而每个排序算法都至少是O(n*logn),所以您有一个很好的答案,谢谢它工作正常!