Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
在Kotlin中,如何按类型分组_Kotlin - Fatal编程技术网

在Kotlin中,如何按类型分组

在Kotlin中,如何按类型分组,kotlin,Kotlin,我想按其泛型类型参数的子类型对列表进行分组 这是一个包含三种类型对象的列表,所有对象都是某个类型a的子类型 我能找到的最接近的是it.javaClass.typeName或it.javaClass.kotlin 前者创建的字符串键并不理想,但我可以处理。后者创建了KClassImpl的键,我无法实际导入,更不用说创建的实例了 如何按类型分组,然后访问结果映射中的不同键 谢谢。您可以将kotlin类实例称为Foo::class data class Person( val firstNam

我想按其泛型类型参数的子类型对列表进行分组

这是一个包含三种类型对象的列表,所有对象都是某个类型a的子类型

我能找到的最接近的是
it.javaClass.typeName
it.javaClass.kotlin

前者创建的字符串键并不理想,但我可以处理。后者创建了
KClassImpl
的键,我无法实际导入,更不用说创建的实例了

如何按类型分组,然后访问结果映射中的不同键


谢谢。

您可以将kotlin类实例称为Foo::class

data class Person(
    val firstName : String,
    val lastName : String
)

data class City(
    val name : String,
    val population: Int
)


fun main(args: Array<String>) {

    val list = listOf(
        Person("John", "Doe"),
        Person("Eugene", "Cuckoo"),
        City("London", 8500000),
        City("Berlin", 3500000),
        City("Hötyökmáró", 2)
    )

    val grouped = list.groupBy { it.javaClass.kotlin }

    println("Persons: ${grouped[Person::class]}")
    println("Cities: ${grouped[City::class]}")

}
数据类人员(
val firstName:String,
val lastName:String
)
数据级城市(
val name:String,
瓦尔人口:Int
)
趣味主线(args:Array){
val list=listOf(
个人(“约翰”、“Doe”),
人(“尤金”、“布谷鸟”),
城市(“伦敦”,8500000),
城市(“柏林”,3500000),
城市(“Hötyökmáró”,2)
)
val grouped=list.groupBy{it.javaClass.kotlin}
println(“人员:${grouped[Person::class]}”)
println(“城市:${grouped[City::class]}”)
}

虽然这样做有效,但我很乐意打勾,但随后我收到了一条反对的警告:“get(Any?):V?不推荐使用。改用“getRaw”。有办法吗?是的,总是这样。它不高兴,因为存在类型不匹配,尽管Java允许这种不匹配很微妙。科特林暂时允许,但很快就不行了。有时,使用“显式指定类型”意图和“显示表达式类型”功能来查看问题是什么,会有所帮助。在这里,可以通过将“val-grouped”更改为:
val-grouped:Map=list.groupBy{it.javaClass.kotlin}
@Gavin来修复它。我认为不推荐的警告已经消失了,在更改
get
类型之前,暂时让人们意识到
get
getRaw
之间的类型安全性。事实上,剥夺警告已经消失,事实上
getRaw
不再被识别,尽管IntelliJ正在用
数据替换
数据。get(type::class)
[类型::类]