有两个list列表:list1和list2存储的元素是统一类型,但二者的顺序不一致,现在需要根据其中一个list来排序另外一个list。

public static void main(String... str) {
List<String> list = new ArrayList<>();
list.add("B");
list.add("D");
list.add("C");
list.add("A");

List<String> list2 = new ArrayList<>();
list2.add("A");
// list2.add("B");
list2.add("C");
list2.add("D");

System.out.println(list);//[B, D, C, A]

setListOrder(list2,list);
System.out.println(list);//[B, A, C, D]
}

public static void setListOrder(List<String> orderRegulation, List<String> targetList) {
Collections.sort(targetList,((o1, o2) -> {
int io1 = orderRegulation.indexOf(o1);
int io2 = orderRegulation.indexOf(o2);
return io1 - io2;
}));
}

说明:如果targetList的数据比 orderRegulation的数据多,多出来的那部分数据,按照原来的顺序,且排在开头。

如果list保存的是自定义对象,对象需要可比较——重写hashCode和equals方法。因为,List的indexOf方法是根据equals来比较的。