在 Hashmap 中查找匹配的 key/value 对

Find matching key/value pairs in Hashmap

假设这是我的哈希图:

HashMap<String,String> map = new HashMap<>();
map.put("animal", "Golden Retriever");
map.put("size", "big");
map.put("color","light golden");

借助这个 我想通了如何通过将键值测试数据和映射本身传递给函数来获取一个特定的匹配元素键值对。

现在,我想扩展功能,以便该应用程序将多个键值对作为参数,并且仍能确定是否有任何匹配元素。

我想我可以处理这个任务的方法是首先更改函数的参数,以便它使用两个散列映射。在这里最终会有一个循环,它在原始哈希图上运行测试数据,看看是否有任何匹配的元素。

处理此任务的最佳方法是什么?

您可以使用流检查数据映射的条目是否包含搜索映射的条目之一:

import java.util.HashMap;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        Map<String, String> data = new HashMap<>();
        data.put("animal", "Golden Retriever");
        data.put("size", "big");
        data.put("color", "light golden");


        Map<String, String> search = new HashMap<>();
        search.put("size", "small");
        search.put("color", "light golden");

        boolean matches = search.entrySet()
                .stream()
                .anyMatch(it -> data.entrySet().contains(it));

        System.out.println(matches);
    }
}

这是由于 Map.Entry.equals() 根据键和值相等性定义的。

您的实用程序方法可能如下所示:

public static <T, U> boolean matches(Map<T, U> data, Map<T, U> search) {
    return search.entrySet()
            .stream()
            .anyMatch(it -> data.entrySet().contains(it));
}

您可以传递两个 HashMap 并循环遍历一个并检查另一个是否匹配。
方法将 haystack 作为检查其中是否有针头的方法。 Returns 相应的布尔值

public boolean ifContains(HashMap<String, String> haystack, HashMap<String, String> needles) {
    for (String key : haystack.keySet()) {
        if (needles.containsKey(key) && needles.get(key).equals(haystack.get(key))) {
            return true;
        }
    }
    return false;
}