如何在 Kotlin 中按值对 LinkedHashMap 进行排序?

问题描述 投票:0回答:4

要按我可以使用的键排序

map.toSortedMap()

但是在 Kotlin 中按值对 LinkedHashMap 进行排序的最佳方法是什么?

sorting kotlin
4个回答
60
投票
map.toList()
    .sortedBy { (key, value) -> value }
    .toMap()

8
投票

您可以将

sortedBy
与解构语法一起使用,并将第一个参数留空:

map.toList().sortedBy { (_, value) -> value }.toMap()

或者您可以在不解构语法的情况下完成此操作(如评论中aksh1618所述):

map.toList().sortedBy { it.second }.toMap()

如果你想立即迭代结果,你甚至不需要

toMap()
:

map.toList()
    .sortedBy { it.second }
    .forEach { (key, value) -> /* ... */ }

0
投票

我不明白你为什么接受这个复杂的答案。

var mapImmutable = mapOf<Int, Int>(1 to 11, 2 to 22, 3 to 33)

println(mapImmutable.toSortedMap(compareByDescending { mapImmutable[it] })) //{3=33, 2=22, 1=11}

mapImmutable[it]
是值
只需将其传递给
compareBy
函数


0
投票

考虑 Map,当 Key 是字符串(作为示例)时,如果映射是在变量中定义的,我们可以按 Value 排序,以便将其插入谓词:

val map = list                                 // List<String>
            .groupingBy { it }
            .eachCount()                       // Creates a Map<String, Int> where the Value is the count of repeated Keys.
map.toSortedMap(compareBy<String> { map[it] }) // Must have the Key type (String) in the comparator

我们可以使用 Map 对象进行其他组合:

键和值升序

map.toSortedMap(compareBy<String> { map[it] }.thenBy { it })

键和值降序

map.toSortedMap(compareByDescending<String> { map[it] }.thenByDescending { it })

键降序和值升序

map.toSortedMap(compareByDescending<String> { map[it] }.thenBy { it })
© www.soinside.com 2019 - 2024. All rights reserved.