Bom dia pessoal,
simplesmente estou tentando classificar esse ArrayList mais não esta classificando, não sei o porquê. Mas ela não é classificada por ordem natural?
mas nem isso esta ocorrendo
[code]import java.util.*;
public class TesteSort {
public static void main(String[] args) {
ArrayList<String> nomes = new ArrayList<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
System.out.println("\nsorted: " + nomes);
//ArrayList nao pode ser classificado o motivo de ter aceito a classificação é
//a classe String ja implementa Comparable permitindo assim a classificação dos
//itens da lista
}
}[/code]
Faltou chamar Collections.sort.
[code]
import java.util.*;
public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
Collections.sort(nomes);
System.out.println("\nsorted: " + nomes);
}
}[/code]
Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:
[code]
import java.util.*;
public class TesteSort {
public static void main(String[] args) {
Set<String> nomes = new TreeSet<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
System.out.println("\nsorted: " + nomes);
}
}[/code]
Em inglês, você não pode confundir “ordered” com “sorted”.
“Sorted” é “ordenado”, e “ordered” é “arranjado” (também pode ser “ordenado” ou “mandado” ou “encomendado”. Depende do contexto).
Para você ter uma idéia, um ArrayList é “ordered” no sentido em que se você inserir as coisas em uma determinada sequência, elas permanecem na mesma sequência em que entraram, e um HashSet não é “ordered” porque ele não preserva essa sequência quando você vai recuperar os elementos, mas um LinkedHashSet já é “ordered” porque ele preserva a sequência. Um TreeSet é “sorted” porque ele sempre deixa as coisas em ordem alfabética.
I ordered a book - eu encomendei um livro
I sorted the books - eu arrumei (ordenei) os livros
[quote=ViniGodoy]Faltou chamar Collections.sort.
[code]
import java.util.*;
public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
Collections.sort(nomes);
System.out.println("\nsorted: " + nomes);
}
}[/code]
Quem classifica coisas automaticamente e elimina duplicatas é o TreeSet:
[code]
import java.util.*;
public class TesteSort {
public static void main(String[] args) {
Set<String> nomes = new TreeSet<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
System.out.println("\nsorted: " + nomes);
}
}[/code]
[/quote]
Eu fiz exatamente isso antes, mas nao esta classificando… =/
Cara letras maiusculas e minusculas espaços no inicio tabem influem na ordenação
Ah, entendi o seu problema. É que se você não passar um parâmetro a mais para o TreeSet, ele não vai ordenar de acordo com as regras da língua portuguesa, mas de acordo com o código Unicode de cada caracter. Para fazer do jeito que você espera:
package guj;
import java.text.Collator;
import java.util.Locale;
import java.util.Set;
import java.util.TreeSet;
public class ExemploSort {
public static void main(String[] args) {
Set<String> nomesUnicode = new TreeSet<String>();
nomesUnicode.add("Fernando");
nomesUnicode.add("diego");
nomesUnicode.add("Maria");
nomesUnicode.add("joão");
nomesUnicode.add("Tales");
System.out.printf("Ordenação Unicode: %s%n", nomesUnicode);
Locale ptBr = new Locale ("pt", "BR");
Set<String> nomesPortugues = new TreeSet<String>(Collator.getInstance(ptBr));
nomesPortugues.add("Fernando");
nomesPortugues.add("diego");
nomesPortugues.add("Maria");
nomesPortugues.add("joão");
nomesPortugues.add("Tales");
System.out.printf("Ordenação em Português: %s%n", nomesPortugues);
}
}
A execução do programa acima mostra:
Ordenação Unicode: [Fernando, Maria, Tales, diego, joão]
Ordenação em Português: [diego, Fernando, joão, Maria, Tales]
OK?
[quote=entanglement]A execução do programa acima mostra:
Ordenação Unicode: [Fernando, Maria, Tales, diego, joão]
Ordenação em Português: [diego, Fernando, joão, Maria, Tales]
OK?[/quote]
De acordo com o livro da katy o código esta apenas dessa forma e esta sendo classificado.
[code]import java.util.*;
public class TesteSort {
public static void main(String[] args) {
List nomes = new ArrayList();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
System.out.println("unsorted: " + nomes);
Collections.sort(nomes);
System.out.println("sorted: " + nomes);
}
}[/code]
Cara ja to ligado no que ta acontecendo quando vc faz System.out.println(nomes);
ele chama o metodo toString e se não me falha a memoria toString de set não garante a ordenação.
Acho que é isso
[quote=vitorfarias]Cara ja to ligado no que ta acontecendo quando vc faz System.out.println(nomes);
ele chama o metodo toString e se não me falha a memoria toString de set não garante a ordenação.
Acho que é isso [/quote]
Eu não estou usando um SET mas sim um LIST
Então siga a dica do Entanglement e passe um Collator no sort:
[code]import java.util.*;
public class TesteSort {
public static void main(String[] args) {
List<String> nomes = new ArrayList<String>();
nomes.add("Fernando");
nomes.add("diego");
nomes.add("Maria");
nomes.add("joão");
nomes.add("Tales");
System.out.println("unsorted: " + nomes);
Collections.sort(nomes, Collator.getInstance());
System.out.println("sorted: " + nomes);
}
}[/code]
Ele que ordena de acordo com o dicionário. Aí “d” maiúsculo fica em ordem com “D” maiúsculo, acentos são agrupados, etc.