比较两个映射的键并返回布尔值

时间:2019-03-25 20:08:43

标签: java lambda java-8 java-stream

我有两个地图,我需要检查两个地图是否具有相同的键和相同的键数,并返回一个布尔值。我想为此使用流,而我得到的是通过创建另一个列表

mapA
.entrySet()
.stream()
.filter(entry -> mapB.containsKey(entry.getKey()))
.collect(
    Collectors.toMap(Entry::getKey, Entry::getValue));

但是我的问题是,我可以在一行中做到这一点吗?它不会创建另一个列表,但是会返回一个布尔值,无论它们是否相同。

1 个答案:

答案 0 :(得分:6)

无需为此使用流。只需获取地图的键集并使用equals, which is specified in Set as follows

  

如果指定的对象也是一个集合,则返回true,两个集合的大小相同,并且指定集合的​​每个成员都包含在此集合[。]中。

Map<String, Integer> m1 = new HashMap<>();
m1.put("a", 10);
m1.put("b", 10);
m1.put("c", 10);

Map<String, Integer> m2 = new HashMap<>();
m2.put("c", 20);
m2.put("b", 20);
m2.put("a", 20);

System.out.println(m1.keySet().equals(m2.keySet()));  //true