List按照给定列表自定义排序写法

有如下一个待排序的列表:

"吕布", "大乔", "诸葛亮", "孙权", "曹操", "周瑜", "刘备", "貂蝉", "小乔"

需要我们按照下方给定的顺序进行排序,如果人名不在下方列表中,则排在最后。

"曹操", "刘备", "孙权", "诸葛亮", "周瑜"

思路:获取待排序对象在给定排序列表中的index,通过index进行排序。

具体实现参考代码:

public class CustomSortTest {

    public static void main(String[] args) {
        //自定义排序规则
        List<String> customSort = Arrays.asList("曹操", "刘备", "孙权", "诸葛亮", "周瑜");
        //需要排序的姓名列表
        List<String> nameList = Arrays.asList("吕布", "大乔", "诸葛亮", "孙权", "曹操", "周瑜", "刘备", "貂蝉", "小乔");

        //进行排序
        //说明:
        // 1、获取o1和o2对象在自定义排序规则customSort中的索引index,之后按照index进行排序。
        // 2、需要o对象有不在customSort中的情况,默认不在的排在最后,即index认为等于Integer.MAX_VALUE
        nameList.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int i1 = customSort.indexOf(o1);
                i1 = i1 == -1 ? Integer.MAX_VALUE : i1;
                int i2 = customSort.indexOf(o2);
                i2 = i2 == -1 ? Integer.MAX_VALUE : i2;
                return i1 - i2;
            }
        });

        //打印排序结果
        StringBuilder sb = new StringBuilder();
        for (String name : nameList) {
            if (sb.length() > 0) {
                sb.append(",");
            }
            sb.append(name);
        }
        System.out.println(sb.toString());
    }

}

结果:

曹操,刘备,孙权,诸葛亮,周瑜,吕布,大乔,貂蝉,小乔

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍