Можем ли мы сортировать, чтобы держать конкретную букву сверху и располагаться в алфавитном порядке? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть такой массив:

"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", находятся сверху, а остальные из них отсортированы по алфавиту. Как я могу добиться этого, используя некоторую сортировку al go в Java или Kotlin?

Прямо сейчас, я знаю только l oop над списком и помещаю элементы, начиная от U до верха список.

Кроме того, если это возможно даже в Sqlite, пожалуйста, поделитесь этим тоже.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Лучший способ применить высокоуровневое переопределение сортировки - это получить целочисленное значение из условия переопределения, а затем отсортировать по этому первому.

In 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]

In SQL:

SELECT description
FROM mytable
ORDER BY CASE WHEN description LIKE 'U%' THEN 0 ELSE 1 END
       , description
0 голосов
/ 30 марта 2020

В Kotlin один из подходов состоит в том, чтобы разбить на два списка, отсортировать каждый и объединить их:

val strings = listOf("Turkish 1", "Indonesian 1", "Malay 2", "Indonesian 3",
                     "Yiddish 1", "Urdu 2", "Malay 1", "Indonesian 2", "Urdu 1")
val result = strings.partition{ it.startsWith("U") }
                    .run{ first.sorted() + second.sorted() }
println(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...