如何从HashMap 中过滤“Null”值?

在map之后,将键值对作为String,写一个逻辑来过滤Map中的所有空值而不使用任何外部API?

除了遍历整个地图并过滤掉值(遍历整个地图并获取条目对象并丢弃这些对)之外,还有其他方法吗?

Map map = new HashMap(); map.put("1", "One"); map.put("2", "Two"); map.put("3", null); map.put("4", "Four"); map.put("5", null); //Logic to filer values //Post filtering It should print only ( 1,2 & 4 pair ) 

您可以使用java 8方法Collection.removeIf来实现此目的:

 map.values().removeIf(Objects::isNull); 

这删除了所有null值。

在线演示

如果您使用的是Java 8之前的版本,则可以使用:

 Collection values = map.values(); while (values.remove(null)) {} 

这是有效的,因为HashMap.values()返回值的视图,并且:

集合[由HashMap.values()返回]支持元素删除,它通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从地图中删除相应的映射。

或者你可以在没有显式迭代的情况下完成:

 values.removeAll(Collections.singleton(null)); 

那可行

 Map result = map.entrySet() .stream() .filter(e -> e.getValue() != null) .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));