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-8forEach
结构的解决方案是:
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));