java-如何从地图中删除所有空元素?

Hes*_*sam 1 java android dictionary retrofit2

最简单的问题形式是我有一个集合,我想删除/删除其所有元素value == null。我不希望删除到位(我想获取新的Map,以便我的原始Map是安全的)。

public Map<String, String> ADDITIONAL_QUERY = new HashMap<>();
this.ADDITIONAL_QUERY.put("deviceManufacturer", payload.getManufacturer());
this.ADDITIONAL_QUERY.put("deviceModel", payload.getModel());
this.ADDITIONAL_QUERY.put("source", payload.getSource());
this.ADDITIONAL_QUERY.put("adrIMEI", payload.getIMEI());
this.ADDITIONAL_QUERY.put("adrMEID", payload.getMEID());
this.ADDITIONAL_QUERY.put("adrUDID", payload.getUuid() == null ? null : payload.getUuid().toString());
this.ADDITIONAL_QUERY.put("adrID", payload.getAndroidId());
this.ADDITIONAL_QUERY.put("adrSERIAL", payload.getSerial());
Run Code Online (Sandbox Code Playgroud)

我向ADDITIONAL_QUERY添加了更多元素,具体取决于我稍后要调用的API。

更多细节

我刚刚将Retrofit库升级到了2.0版。我有@FieldMap Map<String, String> additionalQuery大多数的API(大约100个API)。根据他们的文档意见FieldMap,“在表单编码的请求中命名键/值对。不允许将映射的空值用作键或值。”,如java doc所述(很有趣,他们在网络上的文档说,您可以https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/class-use/FieldMap.html)。

在此处输入图片说明

随着API的调用越来越多,我正在寻找一种开销较小且速度很快的方法。

Bla*_*ess 7

这应该有效:

map.values().removeIf(Objects::isNull);
Run Code Online (Sandbox Code Playgroud)


USK*_*ity 5

您可以使用:

map.values().removeAll(Collections.singleton(null));
Run Code Online (Sandbox Code Playgroud)

  • OP明确表示他不想删除它们。 (3认同)