java - 首先对自定义字符串进行排序

标签 java sorting

我有一个未排序的List ...假设它是ArrayList,其中包含可以多次出现的字符串。我怎样才能首先对某个特定字符串的出现进行排序。其余条目可以保留给定的顺序。

例如。某些字符串必须位于顶部:'JKL'

未排序:{ DEF、ABC、JKL、GHI、ABC、DEF、JKL、MNO、GHI、ABC、MNO、JKL }

排序:{ JKL、JKL、JKL、DEF、ABC、GHI、ABC、DEF、MNO、GHI、ABC、MNO }

有什么建议吗? :)

最佳答案

使用比较器,但要小心确保比较器一致。

public void test() {
    List<String> strs = Arrays.asList(new String[]{"DEF", "ABC", "JKL", "GHI", "ABC", "DEF", "JKL", "MNO", "GHI", "ABC", "MNO", "JKL"});
    // All these are special and should appear at the front of the list.
    Set<String> specials = new HashSet<>(Arrays.asList("ABC", "JKL"));
    strs.sort((String o1, String o2) -> {
        if (specials.contains(o1) == specials.contains(o2)) {
            // Both special or both normal - just compare.
            return o1.compareTo(o2);
        } else if (specials.contains(o1)) {
            // First is special!
            return -1;
        } else {
            // Second is special.
            return 1;
        }
    });
    System.out.println(strs);
}

关于java - 首先对自定义字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36722326/

相关文章:

java - 如何将事务插入到 mysql 中的表中,使其对每个用户都是唯一的

java if Action 并返回

java - 为什么使用QQ Android SDK时没有定义Tencent.onActivityResult

c - 如何按字母顺序对字符串数组进行排序(区分大小写,非标准排序规则)

linux - 如何使用 awk 比较 CSV 列?

java - 谓词在 Java 中查找边缘

java - 使用 Lotus Java/CORBA session.createDateTime(Calendar) 时区问题

Java - 如何在for循环中修改数组并在for循环退出后记住它?

ios - 按 dateTimeString 属性对 NSMutableArray 对象进行排序

arrays - 数组中的number.length-1, "-1"代表什么