public NamedStructureEquivalenceSets<T> build() { ImmutableSortedMap.Builder<String, SortedSet<NamedStructureEquivalenceSet<T>>> builder = new ImmutableSortedMap.Builder<>(Comparator.naturalOrder()); for (Entry<String, Map<Integer, Set<NamedStructureEquivalenceSet<T>>>> e : _sameNamedStructuresByNameAndHash.entrySet()) { String structureName = e.getKey(); Map<Integer, Set<NamedStructureEquivalenceSet<T>>> structuresByHash = e.getValue(); SortedSet<NamedStructureEquivalenceSet<T>> newSet = structuresByHash.values().stream() .flatMap(ss -> ss.stream()) .collect(ImmutableSortedSet.toImmutableSortedSet(Comparator.naturalOrder())); builder.put(structureName, newSet); } NamedStructureEquivalenceSets<T> eqSets = new NamedStructureEquivalenceSets<>(_structureClassName); eqSets.setSameNamedStructures(builder.build()); return eqSets; }
private String equivalenceSetToString( String indent, String name, NamedStructureEquivalenceSets<?> nseSets) { return indent + name + "\n" + nseSets.prettyPrint(indent + indent); }
@Override public String prettyPrint() { StringBuilder sb = new StringBuilder("Results for comparing same name structure\n"); for (String name : _equivalenceSets.keySet()) { if (_equivalenceSets.get(name).size() > 0) { sb.append(equivalenceSetToString(" ", name, _equivalenceSets.get(name))); } } return sb.toString(); } }
new ImmutableSortedMap.Builder<>(Comparator.naturalOrder()); for (Map.Entry<String, SortedSet<NamedStructureEquivalenceSet<T>>> entry : eSets.getSameNamedStructures().entrySet()) { SortedSet<NamedStructureEquivalenceSet<T>> eSetSets = entry.getValue(); SortedSet<String> presentNodes = eSets.setSameNamedStructures(newESetsMap.build());
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)); } }
private <T> void addToDataVectors( NamedStructureEquivalenceSets<T> eSets, Map<String, StringBuilder> vectors) { for (Set<NamedStructureEquivalenceSet<T>> eSet : eSets.getSameNamedStructures().values()) { // make sure the number of nodes with this name is large enough int count = 0; for (NamedStructureEquivalenceSet<T> eClass : eSet) { count += eClass.getNodes().size(); } if (count < THRESHOLD) { continue; } for (StringBuilder sb : vectors.values()) { sb.append('0'); } char className = 'a'; boolean nameOnly = _nameOnly; for (NamedStructureEquivalenceSet<T> eClass : eSet) { for (String node : eClass.getNodes()) { StringBuilder sb = vectors.get(node); if (nameOnly) { sb.setCharAt(sb.length() - 1, '1'); } else { sb.setCharAt(sb.length() - 1, className); } } className++; } } }
.getEquivalenceSets() .get(IpAccessList.class.getSimpleName()) .getSameNamedStructures() .get(aclName), hasSize(1)); .getEquivalenceSets() .get(IpAccessList.class.getSimpleName()) .getSameNamedStructures() .get(aclName), hasSize(2));