Хранение в 2 списках не является хорошим дизайном.Если возможно, вы можете изменить его и сохранить на карте.В зависимости от ваших требований, вы можете решить, какая реализация Map вам нужна.Например: если вы хотите сохранить порядок вставки, вы можете перейти к LinkedHashMap.
Если невозможно выполнить рефакторинг / редизайн, вы можете использовать следующий пример, который я кодировал, чтобы проверить функциональность сортировки.Во-первых, я создал объект Person с переменными «id» и «name» следующим образом:
public class Person {
private String id;
private String name;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
И ниже класс Main, в котором реализована сортировка:
public class TwoLists {
public static void main(String[] args) {
ArrayList<String> idList = new ArrayList<String>();
ArrayList<Person> personList = new ArrayList<Person>();
idList.add("1");
idList.add("2");
idList.add("3");
idList.add("4");
TwoLists twoLists = new TwoLists();
personList.add(twoLists.createPerson("4", "Name4"));
personList.add(twoLists.createPerson("2", "Name2"));
personList.add(twoLists.createPerson("3", "Name3"));
personList.add(twoLists.createPerson("1", "Name1"));
System.out.println("Before Sorting:");
for(Person person: personList) {
System.out.println(person.getId());
}
Collections.sort(personList, twoLists.new TwoListsComparator(idList));
System.out.println("After Sorting:");
for(Person person: personList) {
System.out.println(person.getId());
}
}
private class TwoListsComparator implements Comparator<Person> {
ArrayList<String> idList;
private TwoListsComparator(ArrayList<String> idList) {
this.idList = idList;
}
public int compare(Person person1, Person person2) {
int index1 = idList.indexOf(person1.getId());
int index2 = idList.indexOf(person2.getId());
return Integer.valueOf(index1).compareTo(index2);
}
}
private Person createPerson(String id, String name) {
Person p = new Person();
p.setId(id);
p.setName(name);
return p;
}
}
В приведенном выше коде я создал 2 списка: один для строк идентификатора, а другой для объектов Person.Затем я сортирую список лиц, передавая idList компаратору и сравнивая индексы.