Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 科特林地图<;字符串,列表<;对象>&燃气轮机;值在toSortedMap调用后更改_Dictionary_Kotlin - Fatal编程技术网

Dictionary 科特林地图<;字符串,列表<;对象>&燃气轮机;值在toSortedMap调用后更改

Dictionary 科特林地图<;字符串,列表<;对象>&燃气轮机;值在toSortedMap调用后更改,dictionary,kotlin,Dictionary,Kotlin,我有这样一张地图 Map<String, List<Object>> 通过键比较值,我得到了已排序的贴图,但每个值列表中的对象数量也发生了变化(减少)。太奇怪了。在hood-toSortedMap方法下,使用给定的比较器创建TreeMap,我不知道TreeMap的内部结构,但我假设任何映射都不应该更改值,而只应该使用键进行操作。这对TreeMap来说是正常的还是Kotlin库中的一个bug 编辑 代码我得到这个问题的原因是: val categoriesKeys =

我有这样一张地图

Map<String, List<Object>> 
通过键比较值,我得到了已排序的贴图,但每个值列表中的对象数量也发生了变化(减少)。太奇怪了。在hood-toSortedMap方法下,使用给定的比较器创建TreeMap,我不知道TreeMap的内部结构,但我假设任何映射都不应该更改值,而只应该使用键进行操作。这对TreeMap来说是正常的还是Kotlin库中的一个bug

编辑 代码我得到这个问题的原因是:

val categoriesKeys = listOf("key1", "key2", etc)
val categoriesKeysOrdersMap = mapOf("key1" to 0, "key2" to 1, etc)

val model = listOf(MyModel(..), MyModel(..), etc)

val categoryKeyToModelsMap = categoriesKeys
        .asSequence()
        .map { key ->
            key to model.filter {
                it.categories?.contains(key) == true
            }
        }
        .filter { it.second.isNotEmpty() }
        .toMap()
        .toSortedMap(compareBy { categoriesKeysOrdersMap[it] })

在toMap步骤中,我得到了想要的地图,但没有排序,但在toSortedMap之后,我的数据被弄乱了。Comparator使用category中的键通过category中的int值KeyOrdersMap进行比较。

请提供一些代码来重现此问题显示您的Comparator。比如:
请注意,如果键的自然排序顺序认为此映射的任意两个键相等(如果根据Comparable.compareTo的键相等与根据any.equals的键相等不一致,则可能发生这种情况),只有与最后一个关联的值才能进入结果映射。
@gpunto我添加了代码。我们需要可以编译和运行的代码来查看实际问题。您提供的代码无法编译和运行,因为它缺少信息,例如
MyModel
类以及
model
列表的生成方式。通过只查看您发布的代码,您正在试验的问题不应该发生。请提供一些复制此问题的代码显示您的比较器。比如:
请注意,如果键的自然排序顺序认为此映射的任意两个键相等(如果根据Comparable.compareTo的键相等与根据any.equals的键相等不一致,则可能发生这种情况),只有与最后一个关联的值才能进入结果映射。
@gpunto我添加了代码。我们需要可以编译和运行的代码来查看实际问题。您提供的代码无法编译和运行,因为它缺少信息,例如
MyModel
类以及
model
列表的生成方式。通过只查看您发布的代码,您正在试验的问题不应该发生。
val categoriesKeys = listOf("key1", "key2", etc)
val categoriesKeysOrdersMap = mapOf("key1" to 0, "key2" to 1, etc)

val model = listOf(MyModel(..), MyModel(..), etc)

val categoryKeyToModelsMap = categoriesKeys
        .asSequence()
        .map { key ->
            key to model.filter {
                it.categories?.contains(key) == true
            }
        }
        .filter { it.second.isNotEmpty() }
        .toMap()
        .toSortedMap(compareBy { categoriesKeysOrdersMap[it] })