java - 我们可以排序以将特定字母保持在顶部并按字母顺序排列吗?
问题描述
我有一个这样的数组:
"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 中也可以,也请分享。
谢谢。
解决方案
应用高级排序覆盖的最佳方法是从覆盖条件派生一个整数值,然后首先按该值排序。
在 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
推荐阅读
- python-3.x - 如何将多个字典添加到python中的单个列表中
- internet-explorer - 当前浏览器页面在电脑上的位置
- airflow - 如何在 Airflow 中处理 MFA
- swift - 多个命令产生'
' - angular - 无法将默认值设置为离子选择离子 v4
- android - android-在提交事务后立即调用 findFragmentByTag
- hash - 验证 NSEC3 记录
- bash - 设置包含 = 符号的 conda 环境变量不起作用,在 bash 中有效
- java - 回到类中,从另一个属性中获取一个属性
- android - 从 GitHub 存储库的 firebase gitignore 什么