Cee*_*lus 5 java loops hashmap
MyObj出于我们的目的,该对象包含String message在其他字段中。Map <MultiKey<String>,MyObj> map,.我想循环遍历 HashMap 查找 MyObj 消息所在的任何元素searchValue。我本质上是想在地图上使用stream().anyMatch(),我只是想知道是否searchValue存在,即使在任何地方一次 - 即短路是更好的选择。
Foreach 循环:
map.forEach((k,v) -> {
if (v.message.equalsIgnoreCase(searchValue)) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是它不会提前终止,break也return不能在此 lambda 中使用来提前终止循环。
我看到流 anyMatch() 函数:
map.entrySet().stream().anymatch(....
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚正确的语法 - 如果这在这种情况下完全有效(如果我不比较地图的元素,而是比较每个元素的字段,它仍然可以使用)。
之前海报的工作答案(有没有办法判断哪个更有效?)
//Note: anyMatch can be switched with noneMatch if need be
Run Code Online (Sandbox Code Playgroud)
@JimGarrison:(似乎是最短/可读的):
if (map.values().stream().anyMatch(v -> v.message.equalsIgnoreCase(searchValue))
{...}
Run Code Online (Sandbox Code Playgroud)
@路易斯·沃瑟曼:
if (map.values().stream().map(v -> v.message).anyMatch(searchValue::equalsIgnoreCase))
{...}
Run Code Online (Sandbox Code Playgroud)
@P3trur0:
if (null != map.values().stream().filter(v -> v.message.equalsIgnoreCase(searchValue)).findAny().orElse(null))
{...}
Run Code Online (Sandbox Code Playgroud)