按Key映射两个Dart对象列表,为CustomClass匹配对应Value
按Key映射两个Dart列表生成新列表
要实现将listCustomClass中每个CustomClass实例的value字段,从listKeyValue里匹配相同key的KeyValue对象取值,最优方式是先把listKeyValue转为Map提升查找效率,再遍历生成新列表:
实现代码
// 1. 将listKeyValue转换为key-value映射的Map final keyValueMap = { for (var kv in listKeyValue) kv.key: kv.value }; // 2. 生成新的CustomClass列表 final newListCustomClass = [ for (var item in listCustomClass) CustomClass( key: item.key, name: item.name, value: keyValueMap[item.key], // 从Map中匹配对应key的value ) ];
代码说明
- 用集合字面量把
listKeyValue转为Map<String, String>,后续查找对应key的value时时间复杂度为O(1),比每次遍历列表查找的O(n)更高效,数据量大时优势更明显。 - 遍历
listCustomClass,为每个元素创建新的CustomClass实例,复用原有key和name,value从Map中获取;若没有匹配的key,value会保持null,符合原类的可选字段定义。
验证结果
运行代码后,newListCustomClass结构与预期完全一致:
[ CustomClass(key: "1234", name: "name1", value: "someValue1"), CustomClass(key: "1234", name: "name2", value: "someValue1"), CustomClass(key: "12345", name: "name3", value: "someValue2"), CustomClass(key: "12345678", name: "name4", value: "someValue3"), ]
内容的提问来源于stack exchange,提问作者Sunshine
相关产品推荐
相关产品推荐

