В списке есть метод для этого. Это позволяет вам получить индекс для объекта. Возвращает индекс первого найденного значения, которое совпадает. Есть два способа приблизиться к этому, используя эту функцию. Оба используют sublist
функцию списка.
Первый метод получает метод lastIndexOf
для получения индекса. Преимущество этого заключается в том, что при создании подсписка он не меняет нормальную позицию следующего элемента. Недостатком является то, что индексы получаются в обратном порядке.
List<Integer> vals =
new ArrayList<>(List.of(10, 20, 1, 9, 10, 55, 9, 9, 9));
int selection = 9;
for (;;) {
int idx = vals.lastIndexOf(selection);
if (idx < 0) {
break;
}
System.out.println(selection + " located at index " + idx);
vals = vals.subList(0, idx);
}
Этот следующий метод использует indexOf
для получения значения. Чтобы убедиться, что индексы правильные, в некоторых бухгалтериях необходимо разрешить укороченные подсписки.
vals = new ArrayList<>(List.of(10, 20, 1, 9, 10, 55, 9, 9, 9));
int lastIndex = 0;
for (;;) {
int idx = vals.indexOf(selection);
if (idx < 0) {
break;
}
System.out.println(selection + " located at index "
+ (idx + lastIndex));
idx++;
lastIndex += idx;
vals = vals.subList(idx, vals.size());
}
Наконец, снова используя indexOf
, если все в порядке, чтобы изменить предоставленный список, все, что нужно сделать заменить текущее значение на другое, чтобы оно больше не было найдено.
vals = new ArrayList<>(List.of(10, 20, 1, 9, 10, 55, 9, 9, 9));
for (;;) {
int idx = vals.indexOf(selection);
if (idx < 0) {
break;
}
System.out.println(selection + " located at index "
+ idx);
vals.set(idx, selection + 1); // modify selection
}