code: public List<Segment> getPairedSegments(Segment unpairedSegment) {
      ArrayList<Segment> pairedSegments = new ArrayList<>();
      // search the segments. Index at "unpairedClustering" being the wildcard.
      segments: for(Segment segment : this) {
        // if mismatch except at unpaired Clustering index => exclude.
        for(int i = 0; i < clusteringsCount; i++) {
          // mismatch, but lso do not add wildcard
          if((unpairedSegment.get(i) != Segment.UNCLUSTERED && segment.get(i) != unpairedSegment.get(i)) //
              || segment.get(i) == Segment.UNCLUSTERED) {
            continue segments;
          }
        }
        // add segment to list
        pairedSegments.add(segment);
      }
      return pairedSegments;
    }
docs: Return to a given segment with unpaired objects, the corresponding segments
  that result in an unpaired segment. So, one cluster of a clustering is
  split by another clustering in multiple segments, resulting in a segment
  with unpaired objects, describing the missing pairs between the split
  cluster / between the segments.
  
  Basically we compare only two clusterings at once. If those clusterings do
  not have the whole cluster in common, we have at least three segments (two
  cluster), one of them containing the unpaired segment. A segmentID 3-0,
  describes a cluster 3 in clustering 1 (index 0) and all clusters 3-x in
  clustering 2. So we search for all segments 3-x (0 being a wildcard).
  
  @param unpairedSegment
  @return Segments describing the set of objects that result in an unpaired
  segment