Сортировка списка строк с локализацией
Я хочу сортировать ниже Список строк по языку пользователя
List<String> words = Arrays.asList(
"Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
);
Для разных типов сортировки пользовательских локалей должен быть разным, как в этом случае.
Как отсортировать список выше по языку пользователя?
Я пробовал
Collections.sort(words , String.CASE_INSENSITIVE_ORDER);
Но это не работает для локализации, поэтому как передать параметр locale в Collections.sort()
или есть ли другой эффективный способ?
Ответы
Ответ 1
Вы можете использовать сортировку с помощью специального Компаратора. См. Интерфейс Collator
Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);
Коллатор является компаратором и может быть передан непосредственно методу Collections.sort(...)
.
Ответ 2
Я думаю, что вы должны использовать - Collator
Класс Collator выполняет локальное сравнение String. Вы используете этот класс для создания подпрограмм поиска и сортировки для текста естественного языка.
Сделайте что-то в своем компараторе следующим образом:
public int compare(String arg1, Sting arg2) {
Collator usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY);
return usCollator.compare(arg1, arg2);
}
И передайте экземпляр компаратора Collections.sort
.
Обновление
Как и @Jan Dvorak, он на самом деле является компаратором, поэтому вы можете просто создать его с желаемой локалью, установить силу и передать ее метод сортировки:
Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
Ответ 3
List<MODEL> ulke = QueryCalistir.listele(UlkeListesiSql(), MODEL.class);
Collections.sort(ulke, new Comparator<MODEL>() {
Collator collator = Collator.getInstance(new Locale("tr-TR"));
@Override
public int compare(MODEL o1, MODEL o2) {
return collator.compare(o1.getULKEAD(), o2.getULKEAD());
}
});