Ordenação de Usuário por Nome

5 respostas
surfzera

Pessoal tenho uma Classe Usuario com os seguinte atributos nome, e cnpjUnidade gostaria de ordenar minha lista pelo nome do Usuário. Vejam como estou tetando fazer…

public List<Usuario> selecionaTodosUsuarios() throws SQLException {
		List<Usuario> lista =  (List<Usuario>) repositorioDeUsuario.selecionaTodos();
		for (Usuario usuario : lista) {
		        Usuario usuario1 = localizarUsuarioLDAP(usuario.getCodigoTrim());
		        usuario.setNome(usuario1.getCodigoTrim());
		        usuario.setCnpjUnidade(usuario1.getCnpjUnidadeTrim()); 
		}
		//Ordeno a Lista
		Collator collator = Collator.getInstance(new Locale("pt", "BR"));
		List<Usuario> minhaListaOrdenada = lista;   // Aqui não sei como pegar o objeto usuario.getNome() e ordenar por ele e para retornar minha lista
		Collections.sort(minhaListaOrdenada, collator);
		return lista;
	}

5 Respostas

xandevieira

Faz assim:

Na classe usuario;
public class Usuario implements Comparable {

gets e sets

	public int compareTo(Object arg0) {
		Collator collator = Collator.getInstance(new Locale("pt", "BR"));
		if (arg0 != null) {
			Usuario usuario = (Usuario) arg0;
			return collator.compare(this.getNome(), usuario.getNome());
		} else {
			return 0;
		}
	}

}
e onde vc quer pegar ordenado
Collections.sort(list);
fabiozoroastro

Surfzera,

Você tem duas opções para usar o Collections.sort.

  1. Classe Usuario implementa a interface java.lang.Comparable resultado em uma implementação do método compareTo(T o)
  2. Você cria uma classe(pode ser anônima) que implemente a interface java.util.Comparator resultado em uma implementação do método int compare(T o1, T o2);

Os métodos compareTo(T o) e compare(T o1, T o2) é que possuirão a implementação que fazem a ordenação.
Repare que os dois retornam um int e de acordo com a documentação:

Tenta fazer com essas informações aí… Se não conseguir, avisa!

Até mais.

nel

Oi!

public class Teste {
	public static void main(String[] args) {
		User u = new User();
		u.setName("Joaquim");
		
		User u1 = new User();
		u1.setName("Neusa");
		
		User u2 = new User();
		u2.setName("Faizao");
		
		List<User> users = new ArrayList<User>();
		users.add(u1);
		users.add(u2);
		users.add(u);
		
		Collections.sort(users, new User());
		for(User user : users)
			System.out.println(user.getName());
	}

}

class User implements Comparator<User> {
	private String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	@Override
	public int compare(User o1, User o2) {
		return o1.getName().compareTo(o2.getName());
	}
	
}

Você pode adicionar ao método compare verificação de nomes nulo, por exemplo.
Mas ai vai a seu critério, mas basicamente é isso e funciona perfeitamente.

Aqui no GUJ mesmo tem ótimo post sobre Comparator e Comparable, dá uma pesquisada.
Abraços.

isaiaspf

Opa.Collections.sort(usuarios, new Comparator<Usuario>() { public int compare(Usuario u1, Usuario u2) { return u1.getNome().compareTo(u2.getNome()); } });Abraço.

ViniGodoy

Há uma explicação bastante completa sobre isso aqui:

Criado 18 de julho de 2011
Ultima resposta 18 de jul. de 2011
Respostas 5
Participantes 6