Java 为什么.filter不能从我的映射中删除空值<;字符串,对象>;

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&

我试图从LinkedHashMap中过滤掉不必要的空值。但是,它实际上并没有删除这些值

变量声明

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));