Eu tenho um List<String>
objeto que contém nomes de países. Como posso classificar essa lista em ordem alfabética?
java
list
sorting
collections
alphabetical
Lennie
fonte
fonte
Respostas:
Supondo que sejam Strings, use o método estático conveniente
sort
…fonte
Solução com Collections.sort
Se você é forçado a usar essa lista ou se seu programa possui uma estrutura como
então a resposta de Thilos será a melhor maneira de fazê-lo. Se você combiná-lo com os conselhos de Tom Hawtin - tackline , você obtém:
Solução com um TreeSet
Se você é livre para decidir, e se seu aplicativo pode ficar mais complexo, você pode alterar seu código para usar um TreeSet. Esse tipo de coleção classifica suas entradas exatamente quando elas são inseridas. Não há necessidade de chamar sort ().
Nota lateral sobre por que prefiro o TreeSet
Isso tem algumas vantagens sutis, mas importantes:
TreeSet<String> countyNames
e sabe instantaneamente: esta é uma coleção ordenada de Strings sem duplicatas, e posso ter certeza de que isso é verdade a todo momento . Tanta informação em uma breve declaração.Usar a coleção certa para a tarefa certa é a chave para escrever um código curto e sem erros. Não é tão demonstrativo neste caso, porque você salva apenas uma linha. Mas parei de contar com que frequência vejo alguém usando uma Lista quando deseja garantir que não haja duplicatas e, então, constroem essa funcionalidade. Ou pior, usando duas listas quando você realmente precisa de um mapa.
Não me interpretem mal: o uso de Collections.sort não é um erro ou falha. Mas há muitos casos em que o TreeSet é muito mais limpo.
fonte
Você pode criar uma nova cópia classificada usando o Java 8 Stream ou o Guava:
Outra opção é classificar no local por meio da API de coleções:
fonte
Antes tarde do que nunca! Aqui está como podemos fazer isso (apenas para fins de aprendizado) -
fonte
Em uma linha, usando Java 8:
fonte
Use o argumento dois para de
Collections.sort
. Você desejará um adequadoComparator
que trate caso apropriado (ou seja, lexical, e não UTF16), como o que pode ser obtido atravésjava.text.Collator.getInstance
.fonte
A menos que você esteja classificando seqüências de caracteres somente em inglês sem sotaque, você provavelmente desejará usar a
Collator
. Ele classifica corretamente as marcas diacríticas, pode ignorar maiúsculas e minúsculas e outras coisas específicas do idioma:Você pode definir a força do colador , consulte o javadoc.
Aqui está um exemplo para eslovaco, onde
Š
deve ir depoisS
, mas em UTFŠ
está em algum lugar depoisZ
:fonte
Aqui está o que você está procurando
fonte
Ao usar
Collections.sort()
, podemos classificar uma lista.resultado:
fonte
alfabeto descendente:
fonte
O mesmo no JAVA 8: -
fonte
fonte
Você pode tentar usar um método que eu criei.
String key
- será a ordem que você deseja e, neste caso, em ordem alfabética. Basta colocar "abc ...".String list[]
- a lista que você deseja colocar em ordem usando a teclaint index
- defina como 0, definirá o deslocamento para a tecla.fonte