HashMap比较完全不等式。相同的键相同的顺序不同的值

HashMap comparing complete unequality. Same keys same order different values

嗨,请在下面找到我的场景,

我有两个映射键作为字符串,值作为布尔值。 按键和顺序都是一样的。但值可能会改变。

我需要比较两个地图,如果所有键的值都发生变化,那么我应该停止。

如何进行比较?

Map <String,Boolean> map1 = new TreeMap<String,Boolean>();
map1.put("String1", true);
map1.put("String2", true);

map2 的可能性

1.与 map1 中的值相同。不应该停止

Map <String,Boolean> map2 = new TreeMap<String,Boolean>();
map1.put("String1", true);
map1.put("String2", true);

2。与 map1 相比,一个值 [String2] 发生了变化。不应该停止

Map <String,Boolean> map2 = new TreeMap<String,Boolean>();
map1.put("String1", true);
map1.put("String2", false);

3。与 map1 相比,这两个值都发生了变化。应该到此为止

Map <String,Boolean> map2 = new TreeMap<String,Boolean>();
map1.put("String1", false);
map1.put("String2", false);

对不起,我是新人,所以我在评论中发帖作为回复。

我打算遍历地图并进行检查。在这样做之前,只想检查是否有任何其他巧妙的方法来实现这一目标。

考虑到两个地图都有确切的键数

 public static void main(String[] args)
    {

        Map map1 = new TreeMap();

        map1.put("String1", true);

        map1.put("String2", true);

        Map map2 = new TreeMap();

        map2.put("String1", false);

        map2.put("String2", false);

        Set keys = map1.keySet();
        boolean stop = true;
        for (Iterator i = keys.iterator(); i.hasNext();)
        {
            String key = (String) i.next();
            boolean value1 = (boolean) map1.get(key);
            boolean value2 = (boolean) map2.get(key);

            if (value1 == value2)
            {
                stop = false;
                break;
            }
        }

        if (stop)
            System.out.println("All values are different");
    }

好的。你有使用循环的答案,IMO,两者都是完美的,但有点太复杂了。所以我会提供我的:

boolean allValuesChanged = 
    map2.entrySet()
        .stream()
        .allMatch(entry -> !map1.get(entry.getKey()).equals(entry.getValue()));

这个回答

  • 简单明了
  • 不依赖于键的顺序(因此无论地图的类型是什么,只要它们具有相同的键)
  • 不使用原始类型
  • 一旦找到两个相等的条目就停止循环