You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Comparator将列表中与输入值相等的元素移至顶部

实现将指定元素移至列表顶部的Comparator写法

嘿,这需求其实挺常见的,咱们直接上可运行的代码,再拆解逻辑:

首先得提个小坑:Arrays.asList()返回的是固定大小的列表,直接调用sort()会抛出异常,所以得先转成可变的ArrayList。接下来是核心的Comparator实现:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 原列表
        List<String> myList = Arrays.asList("1234", "1214", "1334");
        // 需要置顶的目标值
        String mInput = "1214";

        // 转成可变列表,避免排序时抛出UnsupportedOperationException
        List<String> mutableList = new ArrayList<>(myList);

        // 自定义Comparator,把目标元素移到最前面
        Comparator<String> targetTopComparator = (a, b) -> {
            boolean aIsTarget = mInput.equals(a);
            boolean bIsTarget = mInput.equals(b);

            if (aIsTarget && !bIsTarget) {
                return -1; // 让目标元素a排在非目标元素b前面
            } else if (!aIsTarget && bIsTarget) {
                return 1; // 让目标元素b排在非目标元素a前面
            } else {
                return 0; // 非目标元素之间保持原有相对顺序
            }
        };

        // 执行排序
        mutableList.sort(targetTopComparator);

        // 输出结果:[1214, 1234, 1334]
        System.out.println(mutableList);
    }
}

逻辑拆解

这个Comparator的核心逻辑非常直观:

  • 每次比较两个元素时,先判断它们是不是我们要置顶的目标值
  • 如果其中一个是目标、另一个不是,就调整返回值让目标元素排在前面
  • 如果两个都不是(或者都是目标),就返回0,保持它们原来的相对位置(这是稳定排序的特性,不会打乱其他元素的原有顺序)

额外说明

如果你的原列表本身就是可变的(比如直接创建的ArrayList),那可以跳过转列表的步骤,直接调用sort()方法就行。

内容的提问来源于stack exchange,提问作者Devrath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:09:52