首页 > 解决方案 > 我们可以排序以将特定字母保持在顶部并按字母顺序排列吗?

问题描述

我有一个这样的数组:

"Turkish 1"
"Indonesian 1"
"Malay 2"
"Indonesian 3"
"Yiddish 1"
"Urdu 2"
"Malay 1"
"Indonesian 2"
"Urdu 1"

我想这样排序:

"Urdu 1"
"Urdu 2"
"Indonesian 1"
"Indonesian 2"
"Indonesian 3"
"Malay 1"
"Malay 2"
"Turkish 1"
"Yiddish 1"

请注意,从“U”开始的项目位于顶部,其余项目按字母顺序排序。如何使用 Java 或 Kotlin 中的一些排序算法来实现这一点?

现在,我只知道遍历列表并将从 U 开始的项目放在列表顶部。

此外,如果即使在 Sqlite 中也可以,也请分享。

谢谢。

标签: javasortingkotlincomparator

解决方案


应用高级排序覆盖的最佳方法是从覆盖条件派生一个整数值,然后首先按该值排序。

在 Java 中:

String[] strings = {
        "Turkish 1",
        "Indonesian 1",
        "Malay 2",
        "Indonesian 3",
        "Yiddish 1",
        "Urdu 2",
        "Malay 1",
        "Indonesian 2",
        "Urdu 1" };
Arrays.sort(strings, Comparator.comparingInt((String s) -> s.startsWith("U") ? 0 : 1)
                               .thenComparing(Comparator.naturalOrder()));
System.out.println(Arrays.toString(strings));

输出

[Urdu 1, Urdu 2, Indonesian 1, Indonesian 2, Indonesian 3, Malay 1, Malay 2, Turkish 1, Yiddish 1]

在 SQL 中:

SELECT description
FROM mytable
ORDER BY CASE WHEN description LIKE 'U%' THEN 0 ELSE 1 END
       , description

推荐阅读