用于高效查找嵌套数据的 Kotlin 数据结构

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

我目前正在开发一个应用程序,需要在文档 pdf 和相应的 JSON 数据文件之间创建映射。这些文件来自第三方,因此我无法控制它们的格式。我目前正在获取传入的 json 文件并将它们反序列化为 kotlin 数据类。下一步是获取反序列化生成的 Idoc 对象列表,并将它们转换为易于查找的数据结构。给定学生 ID、文档 imageCode 和所有者类型(从 pdf 文件名获取),我需要查找 Document.documentYear 值。最有效的方法是什么?

我目前的想法是简单地创建一个地图。所以给定一个

List<Idoc> idocs
我需要创建一个
Map<Student.cbfId, Map<Document.imageCode, Map<DocumentOwner.type, Document>>>
。然而,我正在努力想出一种方法来实现这一点。我也不能 100% 确定这实际上是最好的方法。

我是否在尝试将数据构建为嵌套映射的正确轨道上,或者是否有更好的方法?如果地图是正确的方法,我该如何实际实现呢?

internal data class Idoc(@SerializedName("FileId") val fileId: String, @SerializedName("Student") val students: List<Student>)

internal data class Student(@SerializedName("Id") val id: String,
                            @SerializedName("SchoolId") val schoolId: String,
                            @SerializedName("Name") val name: String,
                            @SerializedName("Documents") val documents: List<Document>)

//Although owners is structured as a list, there will only ever be one Owner per Document      
internal data class Document(
    @SerializedName("Year") val documentYear: String,
    @SerializedName("Code") val imageCode: String,
    @SerializedName("DocumentOwner") val owners: List<DocumentOwner>,
)

internal data class DocumentOwner(@SerializedName("FirstName") val firstName: String,
                                  @SerializedName("LastName") val lastName: String,
                                  @SerializedName("OwnerType") val type: String
java json algorithm kotlin data-structures
1个回答
0
投票

反映您的嵌套结构,您可以使用嵌套循环:


val map: Map<Triple<String, String, String>, Document> = buildMap {
    for (idoc in idocs)
        for (student in idocs.students)
            for (document in student.documents)
                for (owner in document.owners)
                    put(Triple(student.id, document.imageCode, owner.type), document)
}

© www.soinside.com 2019 - 2024. All rights reserved.