私たちは、ソート先頭に特定の文字を維持すると、アルファベット順に休むことができますか?

バグが発生します:

私はこのような配列を持っています:

"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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=367303&siteId=1
おすすめ