Есть метод interval возвращающий интервал [left, right).
class IteratorUtils {
public static Iterable<Integer> interval(int left, int right) {
return new IntervalIterable(left, right);
}
public static Iterable<Integer> merge(Iterable<Integer> iter0, Iterable<Integer> iter1) {
// some code
}
}
class IntervalIterable implements Iterable<Integer> {
private final int left;
private final int right;
public IntervalIterable(int left, int right) {
this.left = left;
this.right = right;
}
@Override
public Iterator<Integer> iterator() {
return new IntervalIterator(left, right);
}
}
class IntervalIterator implements Iterator<Integer> {
private final int max;
private int current;
public IntervalIterator(int left, int right) {
this.max = right;
this.current = left;
}
public boolean hasNext() {
return current < max;
}
public Integer next() {
return current++;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
Теперь нужно написать метод merge, который будет сливать 2 интервала.
Использование:
for (int k : merge(interval(10, 12), interval(10, 12))) {
System.out.print(k + " "); // 10 10 11 11
}
Как теперь реализовать это слияние? Алгоритм слияния двух массивов мне понятен, а вот как написать слияние двух интервалов не могу надумать. Подскажите пожалуйста, как реализовать решение.