我有以下代码,我想在打印或保存在文件中时删除“空”值。
有时我不必将任何值传递给变量。因此,在这些情况下,我需要打印密钥,但没有任何“空”。我怎样才能做到这一点?
我必须使用
LinkedListMultimap
,因为我可能有重复的键并且想要保持进入地图的顺序。
public static void main(String[] args) {
Multimap<String, String> data = LinkedListMultimap.create();
data.put("NAME", getName());
data.put("AGE", getAge());
data.put("DEPARTMENT", getDepartment());
data.forEach((key, value) -> System.out.println("[" + key + "]" + " " + value));
}
电流输出:
[NAME] Joe
[AGE] 25
[DEPARTMENT] null
预期输出:
[NAME] Joe
[AGE] 25
[DEPARTMENT]
我想在打印或保存到文件时删除
值null
在集合中存储和保留
null
没有任何意义(null
- 代表缺乏数据,它不能提供任何有用的信息),这是一个 反模式。
要从地图中删除
null
值 - 使用 removeIf()
对值集合执行批量删除。
values()
方法。正如文档中所指定的,它返回地图值的view,而不是独立的集合。对它所做的所有更改都会反映在地图中。
对返回集合的更改将更新底层 多重映射,反之亦然。
这样就可以了。
Multimap<String, String> data = // initializing multimap
data.values().removeIf(Objects::isNull); // removing null values
data.forEach((k, v) -> System.out.println( ... )); // printin the Multimap
您可以使用三元运算符:
data.forEach((key, value) -> System.out.println("[" + key + "]" + " " + value != null ? value : "{ Put whatever default value you'd like here or leave empty }");
上面的代码中缺少一些内容。其实应该是这样的:
map.values().removeIf(values -> values.stream().anyMatch(Objects::isNull));