记一段 Kotlin 处理 HashMap 数据结构的代码

简介: Kotlin 代码: fun saveDataJson(scenarioId: Long) { val data = nodeModelFieldsDao.

Kotlin 代码:

    fun saveDataJson(scenarioId: Long) {
        val data = nodeModelFieldsDao.findByScenarioId(scenarioId)
        println("data=${JSON.toJSONString(data)}")
        println("开始执行 saveDataJson")
        val modelCodeSet = mutableSetOf<String>()
        data.forEach {
            it.modelCode?.let { v -> modelCodeSet.add(v) }
        }
        println("modelCodeSet=${JSON.toJSONString(modelCodeSet)}")
        val dataJsonObj = hashMapOf<String, HashMap<String?, String?>>()
        modelCodeSet.forEach {
            val mc = it
            dataJsonObj[mc] = hashMapOf() // 这一句话很重要,先初始化 dataJsonObj[mc]
            data.forEach {
                val modelCode = it.modelCode
                if (mc == modelCode) {
                    dataJsonObj[mc]?.set(it.fieldCode, it.value)
                }
            }
        }

        val dataJsonStr = JSON.toJSONString(dataJsonObj)
        println("dataJsonStr=${dataJsonStr}")

        val record = dataJsonDao.findByScenarioId(scenarioId)
        if (record == null) {
            val dataJson = DataJson()
            dataJson.dataJson = dataJsonStr
            dataJson.scenarioId = scenarioId
            dataJsonDao.save(dataJson)
        } else {
            record.dataJson = dataJsonStr
            record.scenarioId = scenarioId
            record.gmtModified = Date()
            dataJsonDao.save(record)
        }

        println("执行完成 saveDataJson")
    }

js 代码是:

var models = new Set();
for (var i = 0; i < data.length; i++) {
    var m = data[i];
    console.log(`m=${JSON.stringify(m)}`);
    let model_code = m.model_code;
    console.log(`model_code=${model_code}`);
    models.add(model_code);
}
console.dir(models);

var model_fields_map = {};
models.forEach(((model_code, index, array) => {
    model_fields_map[model_code] = {};
    data.map(m => {
        if (m.model_code == model_code) {
            model_fields_map[model_code][m.field_code] = `${m.field_output_code}|${m.data_type}|${m.setter_config_json}`
        }
    });
}));
相关文章
|
17天前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
32 1
|
19天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
47 2
|
19天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
50 2
|
17天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
25 1
|
25天前
|
存储 安全 数据库
除了 HashMap,还有哪些数据结构可以实现键值对存储?
【10月更文挑战第11天】 除了`HashMap`,其他常见支持键值对存储的数据结构包括:`TreeMap`(基于红黑树,键有序)、`LinkedHashMap`(保留插入顺序)、`HashTable`(线程安全)、`B-Tree`和`B+Tree`(高效存储大量数据)、`SkipList`(通过跳跃指针提高查找效率)及`UnorderedMap`(类似`HashMap`)。选择合适的数据结构需根据排序、并发、存储和查找性能等需求。
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
31 1
|
27天前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
27 0
|
1月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
27 0
|
1月前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
18 0
|
26天前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
17 1