Вот краткий пример того, как это сделать.Сначала создайте наш список.
List<Integer> a = new LinkedList<Integer>();
a.add(124);
a.add(125);
a.add(126);
a.add(1900);
a.add(1901);
Итак, теперь у нас есть список, давайте начнем.Во-первых, объявляя наши переменные
int current; //will hold the current value during the iteration
int indexStart = 0; //the index of the beginning of the current sequence
int previous = a.get(0); //the previous value
int length = a.size(); //the length (optionnal, but this will be used later)
Затем, вот вам смешная часть (полностью прокомментированная)
//Iterate from 1 to the end (0 is already in `previous`
for(int i = 1 ; i < length; ++i){
//get the current value
current = a.get(i);
//if the sequence is broken, print the index and print also the sublist using `List.subList`.
if(current != previous + 1){
System.out.format("Sequence from %d to %d%n", indexStart, i - 1);
System.out.println(a.subList(indexStart, i));
//reset the start of the current sequence
indexStart = i;
}
//update the previous value with the current for the next iteration.
previous = current;
}
//Print the last sequence.
System.out.format("Sequence from %d to %d%n", indexStart, length - 1);
System.out.println(a.subList(indexStart, length));
Это выведет:
Последовательность из 0до 2
[124, 125, 126]
Последовательность от 3 до 4
[1900, 1901]
Это довольно просто, просто повторяйте цикл и сохраняйте предыдущийи текущее значение, чтобы иметь возможность проверить правильность последовательности.
Обратите внимание, что с LinkedList
я бы использовал Iterator
, но мне нужен int index
, так что это дало быболее длинное решение, поэтому для простоты я использовал List.get
.