/** * Split a given {@link Segment} n-times in round robin fashion. * <br/> * * @param segment The {@link Segment} to split. * @param numberOfTimes The number of times to split it. * @return a collection of {@link Segment}'s. */ public static List<Segment> splitBalanced(Segment segment, int numberOfTimes) { final SortedSet<Segment> toBeSplit = new TreeSet<>(Comparator.comparing(Segment::getMask) .thenComparing(Segment::getSegmentId)); toBeSplit.add(segment); for (int i = 0; i < numberOfTimes; i++) { final Segment workingSegment = toBeSplit.first(); toBeSplit.remove(workingSegment); toBeSplit.addAll(Arrays.asList(workingSegment.split())); } ArrayList<Segment> result = new ArrayList<>(toBeSplit); result.sort(Comparator.comparing(Segment::getSegmentId)); return result; }
private static boolean computeSegments(Segment segment, List<Integer> segments, Set<Segment> applicableSegments) { final Segment[] splitSegment = segment.split(); // As the first segmentId mask, keeps the original segmentId, we only check the 2nd segmentId mask being a know. if (segments.contains(splitSegment[1].getSegmentId())) { for (Segment segmentSplit : splitSegment) { if (!computeSegments(segmentSplit, segments, applicableSegments)) { applicableSegments.add(segmentSplit); } } } else { applicableSegments.add(segment); } return true; }
/** * Split a given {@link Segment} n-times in round robin fashion. * <br/> * * @param segment The {@link Segment} to split. * @param numberOfTimes The number of times to split it. * @return a collection of {@link Segment}'s. */ public static List<Segment> splitBalanced(Segment segment, int numberOfTimes) { final SortedSet<Segment> toBeSplit = new TreeSet<>(Comparator.comparing(Segment::getMask) .thenComparing(Segment::getSegmentId)); toBeSplit.add(segment); for (int i = 0; i < numberOfTimes; i++) { final Segment workingSegment = toBeSplit.first(); toBeSplit.remove(workingSegment); toBeSplit.addAll(Arrays.asList(workingSegment.split())); } ArrayList<Segment> result = new ArrayList<>(toBeSplit); result.sort(Comparator.comparing(Segment::getSegmentId)); return result; }
/** * Split a given {@link Segment} n-times in round robin fashion. * <br/> * * @param segment The {@link Segment} to split. * @param numberOfTimes The number of times to split it. * @return a collection of {@link Segment}'s. */ public static List<Segment> splitBalanced(Segment segment, int numberOfTimes) { final SortedSet<Segment> toBeSplit = new TreeSet<>(Comparator.comparing(Segment::getMask) .thenComparing(Segment::getSegmentId)); toBeSplit.add(segment); for (int i = 0; i < numberOfTimes; i++) { final Segment workingSegment = toBeSplit.first(); toBeSplit.remove(workingSegment); toBeSplit.addAll(Arrays.asList(workingSegment.split())); } ArrayList<Segment> result = new ArrayList<>(toBeSplit); result.sort(Comparator.comparing(Segment::getSegmentId)); return result; }
private static boolean computeSegments(Segment segment, List<Integer> segments, Set<Segment> applicableSegments) { final Segment[] splitSegment = segment.split(); // As the first segmentId mask, keeps the original segmentId, we only check the 2nd segmentId mask being a know. if (segments.contains(splitSegment[1].getSegmentId())) { for (Segment segmentSplit : splitSegment) { if (!computeSegments(segmentSplit, segments, applicableSegments)) { applicableSegments.add(segmentSplit); } } } else { applicableSegments.add(segment); } return true; }
private static boolean computeSegments(Segment segment, List<Integer> segments, Set<Segment> applicableSegments) { final Segment[] splitSegment = segment.split(); // As the first segmentId mask, keeps the original segmentId, we only check the 2nd segmentId mask being a know. if (segments.contains(splitSegment[1].getSegmentId())) { for (Segment segmentSplit : splitSegment) { if (!computeSegments(segmentSplit, segments, applicableSegments)) { applicableSegments.add(segmentSplit); } } } else { applicableSegments.add(segment); } return true; }