1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.data.pipeline.core.util;
19
20 import org.apache.commons.lang3.Range;
21
22 import java.util.Iterator;
23 import java.util.NoSuchElementException;
24
25
26
27
28
29
30
31 public final class IntervalToRangeIterator implements Iterator<Range<Long>> {
32
33 private final long maximum;
34
35 private final long interval;
36
37 private long current;
38
39 public IntervalToRangeIterator(final long minimum, final long maximum, final long interval) {
40 if (minimum > maximum) {
41 throw new IllegalArgumentException("minimum greater than maximum");
42 }
43 if (interval < 0L) {
44 throw new IllegalArgumentException("interval is less than zero");
45 }
46 this.maximum = maximum;
47 this.interval = interval;
48 current = minimum;
49 }
50
51 @Override
52 public boolean hasNext() {
53 return current <= maximum;
54 }
55
56 @Override
57 public Range<Long> next() {
58 if (!hasNext()) {
59 throw new NoSuchElementException("");
60 }
61 long upperLimit = Math.min(maximum, current + interval);
62 Range<Long> result = Range.between(current, upperLimit);
63 current = upperLimit + 1L;
64 return result;
65 }
66 }