比较两个映射值与对应的键

时间:2013-11-13 16:32:21

标签: java map

我有以下两个不同的地图,如下所示..

Map<Integer, List<String>> multimap1 = new HashMap<Integer, List<String>>();
List<String> someList1 = new ArrayList<String>();
someList1.add("abc");
someList1.add("def");
someList1.add("ght");
multimap1.put(1, someList1);

另一个是......

Map<Integer, List<String>> multimap2 = new HashMap<Integer, List<String>>();
List<String> someList = new ArrayList<String>();
someList2.add("abc");
someList2.add("wed");
someList2.add("ght");
multimap2.put(1, someList2);

现在请告知逻辑,因为我想要比较两个地图的值,对应于首先我从第一个地图获取来自multimap1的键,并且还将从multimap2获取第一个键,然后将比较它们

的值
multimap1       multimap2

1   abc         1  abc

如上所示,我已经取了两个地图的关键字,然后比较了与密钥对应的值,因此它匹配,因为具有相同值的不同地图对应于第一个键,所以它应该在控制台上打印语句,地图具有相同的值,对应于键,如果不是那么它应该打印两个地图有不同的值对应的键,请告知如何实现这一点。

2 个答案:

答案 0 :(得分:0)

您的陈述有点令人困惑,两张地图的键1的值都是List。

multimap1       multimap2

1   abc         1  abc

不正确,因为这些不是地图的值,其键为1,它只是值的一部分,因为列表中的其余字符串也是值的一部分。

如果您要比较两个列表的值,则取决于它们相等的含义。如果它们必须以相同的顺序具有相同的值,那么只需检查两个列表的索引的索引。如果他们只需要具有相同的值并且顺序无关紧要,那么检查一个元素的所有元素是否在另一个元素中,反之亦然

答案 1 :(得分:0)

如何使用番石榴做到这一点:

  1. 使用Sets.symmetricDifference()Sets.difference()查找密钥之间的差异。 Sets.intersection()找到常用密钥。
  2. 如果对称差异为空,则迭代公共密钥。如果订单很重要,请将列表包装到HashSetLinkedHashSet中,并将Sets.difference()应用于已包装的广告集。