private <T> void addNamedStructureOutliers( OutliersHypothesis hypothesis, NamedStructureEquivalenceSets<T> equivSet, SortedSet<NamedStructureOutlierSet<?>> rankedOutliers) { String structType = equivSet.getStructureClassName(); for (Map.Entry<String, SortedSet<NamedStructureEquivalenceSet<T>>> entry : equivSet.getSameNamedStructures().entrySet()) { String name = entry.getKey(); SortedSet<NamedStructureEquivalenceSet<T>> eClasses = entry.getValue(); NamedStructureEquivalenceSet<T> max = eClasses.stream() .max(Comparator.comparingInt(es -> es.getNodes().size())) .orElseThrow( () -> new BatfishException( "Named structure " + name + " has no equivalence classes")); SortedSet<String> conformers = max.getNodes(); SortedSet<String> outliers = eClasses.stream() .filter(eClass -> eClass != max) .flatMap(eClass -> eClass.getNodes().stream()) .collect(ImmutableSortedSet.toImmutableSortedSet(Comparator.naturalOrder())); rankedOutliers.add( new NamedStructureOutlierSet<>( hypothesis, structType, name, max.getNamedStructure(), conformers, outliers)); } }