diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index 190020b187aa..2e85f0996935 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -35,6 +35,36 @@ import java.util.concurrent.CopyOnWriteArrayList; public class ContainerUtil { private static final int INSERTION_SORT_THRESHOLD = 10; + public static Map intersection(Map map1, Map map2) { + final Map res = new HashMap(); + final HashSet keys = new HashSet(); + keys.addAll(map1.keySet()); + keys.addAll(map2.keySet()); + for (K k : keys) { + V v1 = map1.get(k); + V v2 = map2.get(k); + if (v1 == v2 || (v1 != null && v1.equals(v2))) { + res.put(k, v1); + } + } + return res; + } + + public static Map> diff(Map map1, Map map2) { + final Map> res = new HashMap>(); + final HashSet keys = new HashSet(); + keys.addAll(map1.keySet()); + keys.addAll(map2.keySet()); + for (K k : keys) { + V v1 = map1.get(k); + V v2 = map2.get(k); + if (!(v1 == v2 || (v1 != null && v1.equals(v2)))) { + res.put(k, Pair.create(v1, v2)); + } + } + return res; + } + @NotNull public static List mergeSortedLists(@NotNull List list1, @NotNull List list2, @NotNull Comparator comparator, boolean mergeEqualItems){ List result = new ArrayList(list1.size() + list2.size());