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()));
这个回答
- 简单明了
- 不依赖于键的顺序(因此无论地图的类型是什么,只要它们具有相同的键)
- 不使用原始类型
- 一旦找到两个相等的条目就停止循环
嗨,请在下面找到我的场景,
我有两个映射键作为字符串,值作为布尔值。 按键和顺序都是一样的。但值可能会改变。
我需要比较两个地图,如果所有键的值都发生变化,那么我应该停止。
如何进行比较?
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()));
这个回答
- 简单明了
- 不依赖于键的顺序(因此无论地图的类型是什么,只要它们具有相同的键)
- 不使用原始类型
- 一旦找到两个相等的条目就停止循环