如何删除值为 null 的 mapEntry 并更正类型?

How can I remove the mapEntry with the value is null and correct the type?

对于可为空变量的情况,我可以使用whereType删除列表中的空值:

List<String?> myList = [null, '123'];
List<String> updatedList = List.from(myList.whereType<String>());
print(updatedList);

// get [123]

但是当涉及到 Map 时,它并不能像预期的那样工作:

Map<String, String?> myMap = {'a':'123', 'b': null};
Map<String, String> updatedMap = Map.fromEntries(myMap.entries.whereType<MapEntry<String,String>>());
print(updatedMap);

// get {}

我只能想到一个变通方法,用另一个带有 for 循环的函数包装它,添加结果和 return。听起来一点也不优雅。有人可以建议如何处理这个案子吗?

您可以试试这个,使用 where 过滤 null 并使用 map<String, String?> 转换为 <String, String> .

ps: 你不能使用 as ...<String, String> 那为什么需要 map.

void main() {
  Map<String, String?> myMap = {'a':'123', 'b': null};
  // Map<String, String> updatedMap = Map.fromEntries(myMap.entries.whereType<MapEntry<String,String>>());
  Map<String, String> updatedMap = Map.fromEntries(myMap.entries.where((e) => e.value != null).map((e) => MapEntry(e.key, e.value!)));
  print(updatedMap);
  print(updatedMap.runtimeType);
  
  // result
  // {a: 123}
  // JsLinkedHashMap<String, String>
}

void main(List<String> args) {
  var myMap = {'a':'123', 'b': null};
  print(myMap);
  myMap.removeWhere((key, value) => value == null);
  print(myMap);
}

输出:

{a: 123, b: null}
{a: 123}

删除空密钥对

 myMap.removeWhere((key, value) => value == null);

从地图创建地图

Map<String, String> updatedMap = Map.from(myMap);

更多关于 Map