需求:tartgetList 需按照另一个 list 里的数据的顺序排序。
public class ListOrder {
public static void main(String[] args) {
List<String> list = Arrays.asList("B2C", "O2O", "A");
List<User> targetList = new ArrayList<User>();
User user1 = new User();
user1.setId("1");
user1.setName("B2C");
user1.setAge(10);
User user2 = new User();
user2.setId("2");
user2.setName("O2O");
user2.setAge(18);
User user3 = new User();
user3.setId("3");
user3.setName("A");
user3.setAge(38);
User user4 = new User();
user4.setId("4");
user4.setName("AA");
user4.setAge(50);
targetList.add(user1);
targetList.add(user2);
targetList.add(user3);
targetList.add(user4);
System.out.println("排列前的数据:");
targetList.forEach(t -> System.out.print(t.getName() + "~" + t.getAge() + " "));
System.out.println();
// 排序
setListOrder(list, targetList);
System.out.println("排序的规则:");
list.forEach(t -> System.out.print(t + " "));
System.out.println();
System.out.println("排列后的数据:");
targetList.forEach(t -> System.out.print(t.getName() + "~" + t.getAge() + " "));
}
public static void setListOrder(List<String> orderRegulation, List<FruitLongAnChannelAndGrandRespVo> targetList) {
// 按照 list 里的 name 来排序 targetList
Collections.sort(targetList, ((o1, o2) -> {
int io1 = orderRegulation.indexOf(o1.getName());
int io2 = orderRegulation.indexOf(o2.getName());
if (io1 != -1) {
io1 = targetList.size() - io1;
}
if (io2 != -1) {
io2 = targetList.size() - io2;
}
return io2 - io1;
}));
}
注意:
该排序适用于数据内容一致(类型一致),顺序不相同的情况。 targetList中多出来的数据,排在新的List数组的最后。