Como fazer ordenação de uma lista de String com acentos em Java

Como fazer ordenação de uma lista de String com acentos em Java

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Como fazer ordenação de uma lista de String com acentos em Java

Olá Amigos, esta semana um aluno precisou ordenar uma lista de nomes com acentos em Java e me pediu uma solução possível para o problema. Esta atividade é relativamente comum em nosso idioma, pois temos a ocorrência de várias palavras acentuadas. Quando a JVM está configurada para o LOCALE correto – Português (pt-BR) não temos problemas com a ordenação de String. O ruim é quando temos alguns caracteres especiais como “¨”, “º” entre outros.

Lista-String


Quando utilizamos a abordagem padrão o Java acaba considerando o Caracter Enconding configurado na JVM que muitas vezes é diferente do idioma padrão dos usuários. Para resolver este problema API do Java temos a classe Collator. Faremos um exemplo prático para entendermos como resolver o problema.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package br.com.feltex.jse.colecao;
 
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class MeuCollator{
 
	public static void main(String[] args) {
		List<String> lista = new ArrayList<>();
 
		lista.add("über");
		lista.add("Äther");
		lista.add("kreativ");
		lista.add("zahlen");
		lista.add("können");
		lista.add("Österreich");
		lista.add("Löhnhoff");
		lista.add("Dähne");
		lista.add("Büscher");
		lista.add("Möde");
		lista.add("Müller");
		lista.add("Linsenbröder");
		lista.add("Lúkin");
 
		System.out.println("Ordem de inclusão: " + lista);
 
		// Realiza a ordenação dos itens
		Collections.sort(lista);		
		System.out.println("Ordem de Simples: " + lista);
 
		Collator collator = Collator.getInstance();
		collator.setStrength(Collator.PRIMARY);
		Collections.sort(lista, collator);		
 
		System.out.println("Ordem com Collator: " + lista);
	}
}

As saídas serão:

1
2
  Ordem de inclusão: [über, Äther, kreativ, zahlen, können, Österreich,
 Löhnhoff, Dähne, Büscher, Möde, Müller, Linsenbröder, Lúkin]
1
2
Ordem de Simples: [Büscher, Dähne, Linsenbröder, Löhnhoff, Lúkin, Möde,
 Müller, kreativ, können, zahlen, Äther, Österreich, über]
1
2
 Ordem com Collator: [Äther, Büscher, Dähne, können, kreativ,
 Linsenbröder, Löhnhoff, Lúkin, Möde, Müller, Österreich, über, zahlen]


Você pode definir a propriedade para força de um Collator a determinar o nível de diferença considerada significativa nas comparações. Quatro pontos fortes são fornecidos: PRIMARY, SECONDARY, TERTIARY, and IDENTICAL (Primário, Secundário, Terciário, e Idênticos). A atribuição exata dos pontos fortes de recursos de linguagem é depende do locale. Por exemplo, em checo, "e" e "f" são considerados principais diferenças, enquanto o "e" e "ê" diferenças secundárias, "e" e "E" são diferenças terciárias e "e" e "e" são idênticos .

Estes resultados foram obtidos ao trabalhar com uma lista de String na versão 7 do Java. Atenção para a sintaxe
“List lista = new ArrayList<>();” que só funcionará se você utilizar a versão 7 ou superior do Java.
Caso utilize uma versão anterior utilize a sintaxe

1
  List<String> lista = new ArrayList<String>();

Links externos


Classe Collator
Ordenação de Lista de objetos em Java

Abraços e por hoje é só! Vida que segue!

Não esqueça de curtir este post nas rede sociais. Dê a sua contribuição social e ajude o autor:

Deixe um comentário