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());
    }

}

结果:

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

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

青草阳光 塑料袋食品袋 大号购物袋方便袋背心袋子打包口袋加厚马夹袋笑脸包装袋超市手提袋 100个装
¥29.70
卡饰社 超轻型汽车掸子 洗车拖把 可伸缩洗车刷擦车用除尘掸子 刷车拖把工具 灰色(含收纳袋) 掸子+洗车刷+毛巾(40*40cm)
¥49.00
收纳博士 真空压缩袋太阳花7件套棉被衣物收纳袋 太阳花3中3小1手泵
¥25.90
誉品丰茂 春节元旦2023新款兔年对联高档植绒布自带背胶春联门联过年新年大门福字喜庆门贴 1.1背胶对联吉星高照( 搭配中号福字 )
¥42.90
蓝海E线(BOEL) 六类千兆网线家用CAT6类高速8芯带水晶头电脑接路由器网吧通用非屏蔽跳线连接线 灰色 15米
¥23.70
点胶防滑手套 劳保防护手套灵活透气 厚款手套耐磨 薄款手套不易掉毛工作司机防护手套 劳保用品 防滑帆布手套(颜色随机发) 12对
¥37.50
狼孩儿豆腐猫砂除臭易结团无尘可冲厕所豆腐猫砂快速吸水猫咪猫砂宠物用品 水蜜桃豆腐猫砂6L(4斤)
¥10.70
普斯盾(pusidun) 一次性医用外科口罩 防脱妆防花粉三层柳叶型立体防护口罩10只/袋量贩装
¥7.92