检测Java可选的Hashmap是否有空值?

检测Java可选的Hashmap是否有空值?,java,java-8,hashmap,optional,Java,Java 8,Hashmap,Optional,我想知道HashMap的所有值是否都为空。除了检查地图中每个条目的值之外,最好的方法是什么 HashMap<Long, Optional<Long>> aMap = new HashMap<>(); aMap.put(new Long(55), Optional.empty()); aMap.put(new Long(66), Optional.empty()); aMap.put(new Long(77), Optional.empty()); aMap.

我想知道
HashMap
的所有值是否都为空。除了检查地图中每个条目的值之外,最好的方法是什么

HashMap<Long, Optional<Long>> aMap = new HashMap<>();

aMap.put(new Long(55), Optional.empty());
aMap.put(new Long(66), Optional.empty());
aMap.put(new Long(77), Optional.empty());
aMap.put(new Long(99), Optional.empty());
HashMap aMap=newhashmap();
aMap.put(新的Long(55),可选的.empty());
aMap.put(新的Long(66),可选的.empty());
aMap.put(新的Long(77),可选的.empty());
aMap.put(新的Long(99),可选的.empty());

使用Java8流的API

使用

boolean allEmpty=aMap.values()
.stream()
.allMatch(opt->!opt.isPresent());
或使用

文档中需要注意的一点是,这两种方法都是“短路终端操作”

这是一种短路终端操作


这意味着,当方法在
noneMatch
中找到第一个匹配项或
allMatch
中找到第一个不匹配项时,它不需要计算整个流,而是立即返回。

除了检查映射中每个条目中的值之外,没有其他方法可以执行此操作(当然,当发现非空值时停止),但是有各种各样的方法可以做到这一点,毫无疑问,有许多答案显示了将如何发布。

除了检查地图上的每个条目之外,没有其他方法可以做到这一点,但是有各种各样的方法可以做到这一点@该链接中的SotiriosDelimanolis解决方案将不适用于
可选
@EJP为什么不适用?
allMatch
Optional::isPresent
?这似乎是对
Optional
的错误使用。映射不应该有值,而应该有占位符“空”值。@chrylis我认为这不是必须的,如果你曾经有过一个带有空值的hashmap,这可能是比检查空值更好的方法。@chrylis谢谢你的评论。我最初使用的是两个大小相同的列表,建议将它们放在地图中。但我知道这样一个事实,即值总是包含所有条目或全部为空。因此,带有可选项的映射并不真正适合我的实际用例,除非阅读您的注释,否则不会意识到这一点,尽管学习如何检查所有空值是很好的:)我认为这应该是一个注释,因为它并没有直接回答问题。@PankajSinghal有时答案只是“否”。没有一种方法可以确切地回答所提出的问题。
boolean allEmpty = aMap.values()
    .stream()
    .noneMatch(Optional::isPresent);