假设我有一个class Foo(val a: String, val b: Int, val c: Date)
,我想Foo
根据所有三个属性对s 列表进行排序.我该怎么做?
假设我在Kotlin中有一个字符串列表: stringList: MutableList<String>
然后通过这样做很容易按不区分大小写的顺序对这样的列表进行排序:
stringList.sortWith(String.CASE_INSENSITIVE_ORDER)
Run Code Online (Sandbox Code Playgroud)
但是,如何按不区分大小写的顺序对对象列表进行排序?例如:places: MutableList<Place>
哪个Place
是带有2个字段的简单类 - name: String
而且id: Int
,我想按name
字段对这些地方进行排序.
我试图做这样的事情:places.sortedWith(compareBy { it.name })
但是这个解决方案并没有考虑到字母的情况.
Kotlin允许我使用多个比较字段对ASC和数组进行排序.
例如:
return ArrayList(originalItems)
.sortedWith(compareBy({ it.localHits }, { it.title }))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试排序DESC(compareByDescending()
)时,它不允许我使用多个比较字段.
有什么办法可以吗?
我需要一个 Kotlin 中的比较器来对进入我的回收器视图中的每个对象进行排序(使用快速适配器)。
我需要按整数对对象进行排序,其中最大的排在前面。
上面的代码对进入列表的对象进行排序,但最大的对象位于列表的末尾。有办法颠倒顺序吗?
playersFastAdapter.itemAdapter.withComparator(compareBy({ it.player.goals }, {it.player.assists}), true)
Run Code Online (Sandbox Code Playgroud) 给出以下类:
interface Item {
val name: String
}
data class Server(override val name: String, val id: String) : Item
data class Local(override val name: String, val date: Int) : Item
data class Footer(override val name: String) : Item
Run Code Online (Sandbox Code Playgroud)
如果我们创建一个列表:
val items = arrayListOf<Item>()
items.add(Server("server", "b"))
items.add(Local("local", 2))
items.add(Footer("footer"))
items.add(Server("server", "a"))
items.add(Local("local", 1))
items.add(Footer("footer"))
items.add(Server("server", "c"))
items.add(Local("local", 0))
Run Code Online (Sandbox Code Playgroud)
并对其进行排序:
val groupBy = items.groupBy { it.name }
val partialSort = arrayListOf<Item>()
//individually sort each type
partialSort.addAll(groupBy["local"]!!.map { it as Local }.sortedWith(compareBy({ it.date …
Run Code Online (Sandbox Code Playgroud) 我必须按 lastName 和 firstName 对对象列表进行排序(如果多个对象的 lastName 相同)。我还必须对这些应用 Collator。
假设我可以为一个属性做到这一点:
val collator = Collator.getInstance(context.getResources().getConfiguration().locale)
myList.sortedWith(compareBy(collator, { it.lastName.toLowerCase() }))
Run Code Online (Sandbox Code Playgroud)
但是是否可以将另一个限制也应用到按名字排序?