Java 从arraylist中存在的hashmap中消除空键

Java 从arraylist中存在的hashmap中消除空键,java,arraylist,java-8,hashmap,Java,Arraylist,Java 8,Hashmap,我正在寻找一个优化的解决方案,从HashMap中删除null键。此哈希映射存在于数组列表中。请找到下面的例子 public class Car { String year; String model; Map<String,String> colors; } List<Car> listOfCars = new ArrayList<Car>(); 我需要一个解决方案来迭代listOfCars,获取颜色映射并从中删除null键。尝试在

我正在寻找一个优化的解决方案,从
HashMap
中删除
null
键。此哈希映射存在于
数组列表中。请找到下面的例子

public class Car {
    String year;
    String model;
    Map<String,String> colors;
}

List<Car> listOfCars = new ArrayList<Car>();
我需要一个解决方案来迭代
listOfCars
,获取颜色映射并从中删除
null
键。尝试在Java8中查看任何其他选项,而不是使用迭代器


谢谢

考虑到地图不能包含重复的钥匙,因此,我们可以说
Car
实例的每个
map
实例最多只能有一个带有
null
钥匙的条目

使用Java-8
forEach
结构的解决方案是:

listOfCars.forEach(e -> e.getColors().remove(null));

尽管它可以通过
for
循环或增强的
for
循环来完成。

是。car.getColors.remove(null);这有什么困难
for(Car-Car:listOfCars){Car.colors.remove(null);}
。我对多次迭代感到有点困惑。谢谢你的回答。你真正需要的是一个解决方案,它首先防止空值进入。@EJP,我有一个用例,我们使用Thrift API将对象序列化/反序列化到数据库(Cassandra)。使用此API要求每次对模型进行任何更改时,都需要使用java类的实用程序(.exe)重新生成java类。在无法重新生成java类的场景中,它最终会反序列化包含带有空键的map的对象。这就是我一直在寻找解决方案的地方。你为什么不直接使用
映射。直接删除
,这样可以避免在整个映射上迭代?@LouisWasserman true,我想我忽略了手头的问题。谢谢!我也在检查如何删除额外的迭代。答案很直截了当。在发布之前应该再次检查。如果您不知道映射是否支持
null
,则在映射上迭代可能会有点问题,即
remove(null)
containsKey(null)
都可能抛出。但是
map.keySet().removeIf(Objects::isNull)
仍然比使用
entrySet()操作要简单。
listOfCars.forEach(e -> e.getColors().remove(null));