从 Java 中的 LinkedListMultimap 中删除“null”

问题描述 投票:0回答:3

我有以下代码,我想在打印或保存在文件中时删除“空”值。

有时我不必将任何值传递给变量。因此,在这些情况下,我需要打印密钥,但没有任何“空”。我怎样才能做到这一点?

我必须使用

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]
java collections hashmap guava multimap
3个回答
2
投票

我想在打印或保存到文件时删除

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

2
投票

您可以使用三元运算符

data.forEach((key, value) -> System.out.println("[" + key + "]" + " " + value != null ? value : "{ Put whatever default value you'd like here or leave empty }");

0
投票

上面的代码中缺少一些内容。其实应该是这样的:

map.values().removeIf(values -> values.stream().anyMatch(Objects::isNull));
© www.soinside.com 2019 - 2024. All rights reserved.