【Java】一个List按照另一个List的数据顺序来排序
需求: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数组的最后。