public static void findAndMergeDuplicatesIntoTopologies(final List<Tree> treesToMerge, final List<Tree> topologies) {
Map<Set<Set<String>>, LeafMappedTree> topologyMap = new HashMap<Set<Set<String>>, LeafMappedTree>(topologies.size());
for (Tree treeTopology : topologies) {
Map<Set<String>, TreeNode> toplogyAsLeafMap = getTreeAsLeafMap(treeTopology, true);
topologyMap.put(toplogyAsLeafMap.keySet(), new LeafMappedTree(treeTopology, toplogyAsLeafMap));
}
for (Tree treeToMerge : treesToMerge) {
Map<Set<String>, TreeNode> treeToMergeAsLeafMap = getTreeAsLeafMap(treeToMerge, false);
LeafMappedTree topology = topologyMap.get(treeToMergeAsLeafMap.keySet());
if (topology != null) {
mergeTreeIntoTopology(topology, treeToMergeAsLeafMap, treeToMerge);
}
}
}