最近遇到对端接口批量查询不能根据批量条件列表顺序返回查询结果的问题,所以需要对返回数据进行重新排序。也就是说我们现在有一个需求:两个List,按照其中一个List元素的顺序对另一个List元素顺序进行排序。
代码如下
// 根据orderList顺序排序,orderList不存在的元素放置在targetList最后面
private static void sort1(List<String> orderList, List<String> targetList) {
targetList.sort(((o1, o2) -> {
int io1 = orderList.indexOf(o1);
int io2 = orderList.indexOf(o2);
if (io1 != -1) {
io1 = targetList.size() - io1;
}
if (io2 != -1) {
io2 = targetList.size() - io2;
}
return io2 - io1;
}));
}
// 根据orderList顺序排序,orderList不存在的元素放置在targetList最前面
private static void sort2(List<String> orderList, List<String> targetList) {
targetList.sort(((o1, o2) -> {
int io1 = orderList.indexOf(o1);
int io2 = orderList.indexOf(o2);
return io1 - io2;
}));
}
进行本地测试
public static void main(String[] args) {
List<String> orderList = Arrays.asList("111", "222", "333", "444", "555", "666");
List<String> targetList = Arrays.asList("555", "111", "333", "777", "222", "666", "444");
System.out.println("origin==> " + targetList);
sort1(orderList, targetList);
System.out.println("sort1==> " + targetList);
sort2(orderList, targetList);
System.out.println("sort2==> " + targetList);
}
完美的实现了想要的功能