参照源List对目标List进行排序
有两个list列表:list1和list2存储的元素是统一类型,但二者的顺序不一致,现在需要根据其中一个list来排序另外一个list。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 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("C"); list2.add("D");
System.out.println(list2.indexOf("B"));
System.out.println(list);
setListOrder(list2, list);
System.out.println(list); }
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; }));
}
|
数据结果:
1 2
| [B, D, C, A] [B, A, C, D]
|
说明:如果 targetList
的数据比 orderRegulation
的数据多,多出来的那部分数据,按照原来的顺序,且排在开头。
如果list保存的是自定义对象,对象需要可比较——重写hashCode和equals方法。因为,List的indexOf方法是根据equals来比较的。
参考文档:
一个list作为参考,排列另一个list的顺序