You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin高效嵌套数据查找结构实现:PDF与JSON映射查询问询

方案可行性分析与实现

方案可行性判断

你提出的三级嵌套Map方案完全可行,而且非常贴合你的查询需求:

  • 三级Key(学生ID → 文档imageCode → 所有者类型)正好匹配你需要的查询维度
  • 基于Map的查询操作时间复杂度为O(1),查询效率极高
  • 结构清晰,能直观反映数据之间的关联关系

如果你的查询场景固定为「通过学生ID、imageCode、所有者类型查询documentYear」,这个方案是当前场景下的最优选择之一。

Kotlin实现代码

利用Kotlin标准库的集合操作,可以简洁完成嵌套Map的构建:

// 从List<Idoc>构建目标嵌套Map
fun buildDocumentLookup(idocs: List<Idoc>): Map<String, Map<String, Map<String, Document>>> {
    return idocs
        // 展开所有Idoc中的Student
        .flatMap { it.students }
        // 展开每个Student的Document,同时关联StudentId和所有者类型
        .flatMap { student ->
            student.documents.map { document ->
                Triple(student.id, document, document.owners.firstOrNull()?.type)
            }
        }
        // 过滤无所有者类型的无效Document(按需调整)
        .filter { it.third != null }
        // 第一层按StudentId分组
        .groupBy(keySelector = { it.first }, valueTransform = { Pair(it.second.imageCode, Pair(it.second, it.third!!)) })
        // 转换为二级Map(imageCode → 所有者类型 → Document)
        .mapValues { (_, studentDocs) ->
            studentDocs
                .groupBy(keySelector = { it.first }, valueTransform = { it.second })
                .mapValues { (_, imageEntries) ->
                    imageEntries.associateBy(keySelector = { it.second }, valueTransform = { it.first })
                }
        }
}

// 使用示例
val idocs: List<Idoc> = // 你的JSON反序列化结果
val lookupMap = buildDocumentLookup(idocs)

// 查询documentYear
val targetYear = lookupMap["学生ID"]?.get("文档imageCode")?.get("所有者类型")?.documentYear

代码说明

  1. 数据展开:通过flatMap逐层拆解Idoc→Student→Document,同时绑定所需的查询Key
  2. 无效数据过滤:提前过滤掉无所有者类型的Document,避免后续查询出现空指针
  3. 嵌套结构构建:
    • 第一层按学生ID分组
    • 第二层按文档imageCode分组
    • 第三层通过associateBy将所有者类型直接映射到对应的Document
  4. 快速查询:通过三级Key链式访问,一步获取目标documentYear

可选优化方向

如果后续需要更灵活的查询(比如按学生ID+imageCode获取所有所有者的文档),可以将三级Map调整为Map<String, Map<String, List<Pair<String, Document>>>>,但如果查询需求固定,原方案的效率更高。

内容的提问来源于stack exchange,提问作者pbuchheit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:12:47