gpt4 book ai didi

java - 如何只在for循环中的所有条件都为真时才返回真?

转载 作者:行者123 更新时间:2023-11-30 07:51:29 26 4
gpt4 key购买 nike

  • 我有一个 keyStore,它可以包含一个或多个键值对
  • 我有一个可以由一个或多个键值对组成的 nodeMap
  • keyStore 中的所有键必须存在于 nodeMap 中,并且 keyStore 中的所有键值对必须在 nodeMap 中匹配才能返回 true

例如:

keyStore {key1=>value1}
nodeMap {key1=>value1, key2=>value2}
return true

----

keyStore {key1=>value1, key2=>value2}
nodeMap {key1=>value1, key2=>value2}
return true

----

keyStore {key1=>value1, key3=>value3}
nodeMap {key1=>value1, key2=>value2}
return false;

----

keyStore {key1=>value1, key3=>value3}
nodeMap {key1=>value1, key2=>value2, key3=>value3}
return true;

代码:

private boolean checkForMatch(NamedNodeMap nodeMap, Map<String, String> keyStore)
{
boolean foundMatch = false;
for (int i = 0; i < nodeMap.getLength(); i++)
{
Node node = nodeMap.item(i);
String nodeName = node.getNodeName();
if (keyStore.containsKey(nodeName))
{
if (keyStore.get(nodeName).contains(node.getNodeValue()))
{
foundMatch = true;
}
else
{
foundMatch = false;
break;
}
}
}
return foundMatch;
}

由于多种原因,这将不起作用,例如,当 nodeMap 包含许多键值对但 keyStore 仅包含一个键值对时,第一个条件失败然后循环中断,而不是继续。

最佳答案

我能想到的最简单易读的方法是转换你的 NamedNodeMap实例到实际 Map<String, String>然后使用标准 Set.containsAll执行所需检查的方法:

private boolean checkForMatch(NamedNodeMap nodeMap, Map<String, String> keyStore) {

// First create map from nodeMap
Map<String, String> nodes = new HashMap<>();
for (int i = 0; i < nodeMap.getLength(); i++) {
Node node = nodeMap.item(i);
nodes.put(node.getNodeName(), node.getNodeValue());
}

// Then check the condition
return nodes.entrySet().containsAll(keyStore.entrySet());
}

您可以使用流在一行中完成此操作:

private boolean checkForMatch(NamedNodeMap nodeMap, Map<String, String> keyStore) {
return IntStream.range(0, nodeMap.getLength())
.mapToObj(nodeMap::item)
.collect(Collectors.toMap(Node::getNodeName, Node::getNodeValue))
.entrySet().containsAll(keyStore.entrySet());
}

这两个片段在功能上是等同的。

关于java - 如何只在for循环中的所有条件都为真时才返回真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com