У меня есть List<String>
объект, который содержит названия стран. Как я могу отсортировать этот список по алфавиту?
186
У меня есть List<String>
объект, который содержит названия стран. Как я могу отсортировать этот список по алфавиту?
Ответы:
Предполагая, что это строки, используйте удобный статический метод
sort
...источник
Решение с Collections.sort
Если вы вынуждены использовать этот список, или если ваша программа имеет такую структуру, как
тогда ответ Тилоса будет лучшим способом сделать это. Если вы объедините это с советом Тома Хотина - tackline , вы получите:
Решение с помощью TreeSet
Если вы можете принять решение, и если ваше приложение может стать более сложным, вы можете изменить свой код, чтобы использовать вместо него TreeSet. Этот вид коллекции сортирует ваши записи только тогда, когда они вставлены. Нет необходимости вызывать sort ().
Заметка о том, почему я предпочитаю TreeSet
Это имеет некоторые тонкие, но важные преимущества:
TreeSet<String> countyNames
и сразу же знает: это отсортированная коллекция строк без дубликатов, и я могу быть уверен, что это так в любой момент . Столько информации в короткой декларации.Использование правильной коллекции для правильной задачи является ключом для написания короткого кода без ошибок. В этом случае это не так показательно, потому что вы просто сохраняете одну строку. Но я перестал считать, как часто я вижу, что кто-то использует Список, когда он хочет убедиться, что нет дубликатов, а затем сам создает эту функциональность. Или еще хуже, используя два списка, когда вам действительно нужна карта.
Не поймите меня неправильно: использование Collections.sort не является ошибкой или недостатком. Но есть много случаев, когда TreeSet намного чище.
источник
Вы можете создать новую отсортированную копию, используя Java 8 Stream или Guava:
Другой вариант - сортировка на месте через API коллекций:
источник
Лучше поздно, чем никогда! Вот как мы можем это сделать (только для целей обучения) -
источник
В одну строку, используя Java 8:
источник
Используйте два аргумента для of
Collections.sort
. Вам понадобится подходящий,Comparator
который обрабатывает соответствующий случай (т. Е. Лексический, а не порядок UTF16), такой как тот, который можно получить с помощьюjava.text.Collator.getInstance
.источник
Если вы не сортируете строки только на английском языке без акцента, вы, вероятно, захотите использовать
Collator
. Он будет правильно сортировать диакритические знаки, может игнорировать регистр и другие специфичные для языка вещи:Вы можете установить силу составителя , см. Javadoc.
Вот пример для словацкого, где
Š
следует идти послеS
, но в UTFŠ
где-то послеZ
:источник
Вот что вы ищете
источник
Используя
Collections.sort()
, мы можем отсортировать список.вывод:
источник
нисходящий алфавит:
источник
То же самое в JAVA 8: -
источник
источник
Вы можете попробовать использовать метод, который я сделал.
String key
- будет порядок, который вы хотите, и в этом случае в алфавитном порядке. Просто поставьте «abc ...».String list[]
- список, который вы хотите привести в порядок, используя ключ.int index
- установить в 0, установит смещение для ключа.источник