根据其他列表的顺序对列表进行排序
我需要对对象列表进行排序(,其中每个对象都有一些属性,例如(唯一),, ...等)。Person
List<Person>
Person
id
name
age
排序顺序基于另一个列表。该列表包含一组 's(A 已排序)。Person
id
List<String>
以与使用 Kotlin 或 Java 的列表相同的顺序对 进行排序的最佳方法是什么?List<Person>
id
例:
List Person {
(“ID1”,”PERSON1”,22,..), (“ID-2”,”PERSON2”,20,..) ), (“ID-3”,”PERSON3”,19,..),…..
}
有序 ID 列表 :
List of ID {(“ID2”), (“ID1”),(”ID3”)….}
排序列表应为:Person
List PERSON {
(“ID-2”,”PERSON 2”,20,..) ), (“ID1”,”PERSON 2”,22,..), (“ID-3”,”PERSON 2”,19,..),…..
}
如果列表包含列表中未提及的任何 's,则这些值应位于排序列表的末尾。Person
id
id
编辑:这是我目前在Java中的方式。我希望有比这更好的方法:
public static List<Person> getSortList(List <Person> unsortedList, List<String> orderList){
if(unsortedList!=null && !unsortedList.isEmpty() && orderList!=null && !orderList.isEmpty()){
List sortedList = new ArrayList<OpenHABWidget>();
for(String id : orderList){
Person found= getPersonIfFound(unsortedList, id); // search for the item on the list by ID
if(found!=null)sortedList.add(found); // if found add to sorted list
unsortedList.remove(found); // remove added item
}
sortedList.addAll(unsortedList); // append the reaming items on the unsorted list to new sorted list
return sortedList;
}
else{
return unsortedList;
}
}
public static Person getPersonIfFound(List <Person> list, String key){
for(Person person : list){
if(person.getId().equals(key)){
return person;
}
}
return null;
}