如何从两个哈希图中检索公用键值对

时间:2018-06-26 09:40:28

标签: java

我有两个哈希图:

Map<String, String> mapA = new HashMap<String, String>();
Map<String, String> mapB = new HashMap<String, String>();
TreeSet<String> uniquekeys = new TreeSet<String>();
mapA.put("1","value1");
mapA.put("2","value2");
mapA.put("3","value3");
mapA.put("4","value4");
mapA.put("5","value5");
mapA.put("6","value6");
mapA.put("7","value7");
mapA.put("8","value8");
mapA.put("9","value9");
mapB.put("1","value1");
mapB.put("2","value2");
mapB.put("3","value3");
mapB.put("4","value4");
mapB.put("5","value5");

要从两个哈希图中获取公用键值对,我编写了以下逻辑:

uniquekeys.addAll(mapA.keySet());
uniquekeys.addAll(mapB.keySet());

,然后使用treeset: uniquekeys中的键从mapA和mapB检索唯一的键值对。 但这没有给我mapA中所有键的详细信息。我知道这种方式是有缺陷的,但我无法提出适当的逻辑。 谁能让我知道如何将mapA和mapB中常见的键值对检索到新的HashMap中?

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式对Java 8 Streams进行操作:

Map<String, String> commonMap = mapA.entrySet().stream()
        .filter(x -> mapB.containsKey(x.getKey()))
        .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));

答案 1 :(得分:1)

尝试以下逻辑:

Map<String, String> common = new HashMap<String, String>();
        for(String key : mapA.keySet()) {
            if(mapB.get(key) !=null ) {
                if(mapA.get(key).equals(mapB.get(key))) {
                    common.put(key, mapA.get(key));
                }
            }
        }

答案 2 :(得分:0)

您可以将通用值填充到TreeSet中,而不是将所有键都添加到TreeSet中:

uniquekeys.addAll(mapA.keySet());
uniquekeys.retainAll(mapB.keySet());

这样,将删除A中包含但B中包含的键。知道您已经有了TreeSet,就可以做您想做的事。

但是,您也可以按照@Ramesh和@NiVeR的建议,在不使用TreeSet的情况下创建HashMap

答案 3 :(得分:0)

使用番石榴实用程序集

Set<String> intersectionSet = Sets.intersection(firstSet, secondSet);