如何删除值为 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
。
对于可为空变量的情况,我可以使用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
。