У меня есть класс Sorts, который сортирует (на основе сортировки вставки, которая была направлением назначения), любой ArrayList любого типа, прошедший через него, и использует вставки рода для сортировки элементов в списке лексикографически:Не знаете, как отсортировать ArrayList на основе частей объектов в этом ArrayList (Java)
public class Sorts
{
public static void sort(ArrayList objects)
{
for (int i=1; i<objects.size(); i++)
{
Comparable key = (Comparable)objects.get(i);
int position = i;
while (position>0 && (((Comparable)objects.get(position)).compareTo(objects.get(position-1)) < 0))
{
objects.set(position, objects.get(position-1));
position--;
}
objects.set(position, key);
}
}
}
в одном из моих других файлов, я использую метод (который вызывается в основной позже), которая сортирует объекты типа владельца, и мы должны сортировать их фамилия (если они совпадают, а затем имя):
Направления: «Отсортировать список владельцев по фамилии от А до Я. Если у более чем одного владельца есть тот же последний имя, сравнить их имена. Этот метод вызывает метод сортировки, определенный в классе Sorts. »
В первую очередь я хотел получить фамилию каждого владельца в цикле for, добавить его во временный ArrayList строки типа, вызвать Sorts.sort (), а затем повторно добавить его обратно в ArrayList ownerList:
public void sortOwners() {
ArrayList<String> temp = new ArrayList<String>();
for (int i=0; i<ownerList.size(); i++)
temp.add(((Owner)ownerList.get(i)).getLastName());
Sorts.sort(temp);
for (int i=0; i<temp.size(); i++)
ownerList.get(i).setLastName(temp.get(i));
}
Я предполагаю, что это был неправильный способ приблизиться к нему, так как он не сортировки, когда я компилирую
Что я теперь думаю я. нужно создать два массива ArrayLists (один из них firstName, один - LastName) и сказать, что в цикле for, если (lastName одинаково), сравните firstName, но я не уверен, Для этого нужно два ArrayLists, поскольку это кажется излишне сложным.
Как вы думаете?
Edit: Я добавляю версию CompareTo (Object другой):
public int compareTo(Object other)
{
int result = 0;
if (lastName.compareTo(((Owner)other).getLastName()) < 0)
result = -1;
else if (lastName.compareTo(((Owner)other).getLastName()) > 0)
result = 1;
else if (lastName.equals(((Owner)other).getLastName()))
{
if (firstName.compareTo(((Owner)other).getFirstName()) < 0)
result = -1;
else if (firstName.compareTo(((Owner)other).getFirstName()) > 0)
result = 1;
else if (firstName.equals(((Owner)other).getFirstName()))
result = 0;
}
return result;
}
У меня уже есть Владелец, реализующий Comparable, и у него есть метод compareTo (Object other) внутри него, и он сравнивает lastName и firstName. Итак, как бы применить это в sortOwners()? –
Затем вы должны быть установлены - просто передайте 'ArrayList' '' Sorts.sort() '. –
Это то, что я делаю, и я до сих пор разбираю некоторые вещи, а некоторые нет. –