バグが発生します:
私はこのような配列を持っています:
"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