private static void reduceTypeInfos( final Map<String, List<TypeInfo>> typeInfoTypeMap, final List<TypeInfo> reducedTypeInfos) { for (final Map.Entry<String, List<TypeInfo>> entry : typeInfoTypeMap.entrySet()) { final List<TypeInfo> listOfTypeInfosWithSamePrimaryType = entry.getValue(); TypeInfo firstTypeInfo = null; for (final TypeInfo typeInfo : listOfTypeInfosWithSamePrimaryType) { if (firstTypeInfo == null) { firstTypeInfo = typeInfo; } else { firstTypeInfo.combinePropertySets(typeInfo.getPropertySet()); // "save" node references for later use firstTypeInfo.getNodeIds().addAll(typeInfo.getNodeIds()); } } // firstTypeInfo now contains the intersection of all type infos of a given type reducedTypeInfos.add(firstTypeInfo); // set hierarchy level firstTypeInfo.setHierarchyLevel(listOfTypeInfosWithSamePrimaryType.size()); } }