Проблема с indexOf()
является то, что она возвращает индекс первого вхождения элемента в списке, или -1
, если нет. Если в вашем списке есть дубликаты, то для этих дубликатов вы получите индекс их первого появления в списке.
Есть много способов добиться того, чего вы хотите. Одним из них является использование SortedSet
и помощник IndexedEntry
класса:
public class IndexedEntry<T extends Comparable<T>>
implements Comparable<IndexedEntry<T>> {
private final Integer index;
private final T entry;
public IndexedEntry(Integer index, T entry) {
this.index = index;
this.entry = entry;
}
public Integer getIndex() {
return this.index;
}
public T getEntry() {
return this.entry;
}
@Override
public int compareTo(IndexedEntry<T> other) {
int byEntry = this.getEntry().compareTo(other.getEntry());
if (byEntry == 0) {
return this.getIndex().compareTo(other.getIndex());
}
return byEntry;
}
@Override
public String toString() {
return "(" + this.entry + ", " + this.index + ")";
}
}
IndexedEntry
класса просто обертывает значение Comparable
и его индекс, и реализует Comparable
сначала сравнивает значение, и если значение равно, то он сравнивает индекс. Это означает, что упорядоченный список IndexedEntry
будет иметь свои элементы, упорядоченные по (value, index)
.
Чтобы использовать IndexedEntry
класс, просто перебирать свою коллекцию, создайте IndexedEntry
для каждого элемента, обернув элемент и его индекс, а затем отсортировать список IndexedEntry
:
List<Float> unordered = new ArrayList<>(Arrays.asList(3.2f, 1.0f, 7.5f, 3.2f, 0.8f));
System.out.println(unordered); // [3.2, 1.0, 7.5, 3.2, 0.8]
List<IndexedEntry<Float>> ordered = new ArrayList<>();
for (int i = 0; i < unordered.size(); i++) {
IndexedEntry<Float> entry = new IndexedEntry<>(i, unordered.get(i));
ordered.add(entry);
}
Collections.sort(ordered);
System.out.println(ordered); // [(0.8, 4), (1.0, 1), (3.2, 0), (3.2, 3), (7.5, 2)]
После сортировки, то ordered
список будет содержать элементы вместе с исходным индексом.
1. Вы не показываете свои объекты; 2. в Java нет такой вещи, как «индекс». Пожалуйста, покажите код. – fge
@fge "2. нет такой вещи, как« индекс »в Java» - ???? – brso05
Отправьте примерный список, какой результат вы хотите получить, и то, что вы уже пробовали. – khelwood