Java 为什么.filter不能从我的映射中删除空值<;字符串,对象>;
我试图从LinkedHashMap中过滤掉不必要的空值。但是,它实际上并没有删除这些值 变量声明Java 为什么.filter不能从我的映射中删除空值<;字符串,对象>;,java,java-8,java-stream,linkedhashmap,Java,Java 8,Java Stream,Linkedhashmap,我试图从LinkedHashMap中过滤掉不必要的空值。但是,它实际上并没有删除这些值 变量声明 Map<String,Object> dataDictionary = new LinkedHashMap<>(); 期望删除空值及其键,但这似乎没有发生。您所做的完全没有必要。以下内容足以删除所有null值: dataDictionary.values().removeIf(Objects::isNull); 不需要溪流之类的东西 编辑:以下是我测试过的代码: Map&
Map<String,Object> dataDictionary = new LinkedHashMap<>();
期望删除空值及其键,但这似乎没有发生。您所做的完全没有必要。以下内容足以删除所有
null
值:
dataDictionary.values().removeIf(Objects::isNull);
不需要溪流之类的东西
编辑:以下是我测试过的代码:
Map<String,Object> dataDictionary = new LinkedHashMap<>();
dataDictionary.put("industryCodes", null);
dataDictionary.put("regionCodes", "test");
dataDictionary.put("omitKeywords", null);
dataDictionary.put("resultsPerPage", 21);
dataDictionary.values().removeIf(Objects::isNull);
System.out.println(dataDictionary);
你必须提供一些我们可以测试的东西,因为它是不可能回答的。。。您的
值
中的一些独立属性为null,但不是值本身,是吗?这不是打印null
的方式,因此我猜这是一个覆盖toString
的实例,它打印一个变量null
,实例本身不是。我认为Amongalen的答案是正确的。也许这个值不是null
,而是带有toString()
返回“
@PremiumAluminium”的东西在我的答案中添加了测试代码,请检查它。我想你可能是对的,这些值实际上不是null。或者,在Java 8之前:dataDictionary.values().removeAll(Collections.singleton(null))代码>
dataDictionary.values().removeIf(Objects::isNull);
Map<String,Object> dataDictionary = new LinkedHashMap<>();
dataDictionary.put("industryCodes", null);
dataDictionary.put("regionCodes", "test");
dataDictionary.put("omitKeywords", null);
dataDictionary.put("resultsPerPage", 21);
dataDictionary.values().removeIf(Objects::isNull);
System.out.println(dataDictionary);
dataDictionary.values().removeAll(Collections.singleton(null));