tenho o seguinte objeto
nome: Evandro
dispositivo: 7
descricao : sadsdsdsads
nome : jose
dispositivo : 5
descricao: dassddsdddd
nome : Evandro
dispositivo : 5
descricao: dadsdas
nome: jose
dispositivo: 1
descricao: aaaaaaaaa
gostaria de ordernar meu objeto em ordem pelo nome e dispositivo assim
nome : Evandro
dispositivo : 5
descricao: dadsdas
nome: Evandro
dispositivo: 7
descricao : sadsdsdsads
nome: jose
dispositivo: 1
descricao: aaaaaaaaa
nome : jose
dispositivo : 5
descricao: dassddsdddd
como eu posso fazer isso ???
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Dado> dados = new ArrayList<>();
dados.add(new Dado("Evandro", 7));
dados.add(new Dado("Jose", 5));
dados.add(new Dado("Evandro", 5));
dados.add(new Dado("Jose", 1));
Collections.sort(dados, Dado.COMPARATOR);
}
}
class Dado {
final String nome;
final int dispositivo;
public Dado(String nome, int dispositivo) {
this.nome = nome;
this.dispositivo = dispositivo;
}
static final Comparator<Dado> COMPARATOR = new DadoComparator();
private static class DadoComparator implements Comparator<Dado> {
@Override
public int compare(Dado lhs, Dado rhs) {
int cmpNome = lhs.nome.compareTo(rhs.nome);
if (cmpNome != 0)
return cmpNome;
else
return Integer.compare(lhs.dispositivo, rhs.dispositivo);
}
}
}
Java 8:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Dado> dados = new ArrayList<>();
dados.add(new Dado("Evandro", 7));
dados.add(new Dado("Jose", 5));
dados.add(new Dado("Evandro", 5));
dados.add(new Dado("Jose", 1));
Comparator<Dado> comparator = Comparator
.<Dado, String>comparing(dado -> dado.nome)
.thenComparingInt(dado -> dado.dispositivo);
List<Dado> ordenada = dados.stream()
.sorted(comparator)
.collect(Collectors.toList());
}
}
class Dado {
final String nome;
final int dispositivo;
public Dado(String nome, int dispositivo) {
this.nome = nome;
this.dispositivo = dispositivo;
}
}
Java 8 possui estes métodos padrão
Ex:
List objetos=new ArrayList<>();
…
demais Códigos
// para inverter a ordem inverte o p1 e p2
…
objetos.sort((p1,p2)->{
integer retorno=p1.getParametro1().compareTo(p2.getParametro1());//Long, Integer, Date entre outros
if(retorno==0){// se for igual
return p1.getParametro2().compareTo(p2.getParametro2());
}
return retorno;
}
1 curtida
A implementação mencionada é interessante pois ajuda bastante na redução de linhas de código.
Considerando a agumentação de @Dinho_Zanatta_Br, com o devido reconhecimento às instruções de @lvbarbosa apresento outra alternativa de codificação:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Contato {
private final String nome;
private final int numero;
public Contato(String nome, int numero) {
this.nome = nome;
this.numero = numero;
}
public static void main(String[] args) {
List<Contato> contatos = new ArrayList<>();
//adicionando itens à coleção
Collections.addAll(contatos, new Contato("Evandro", 7), new Contato("Jose", 5), new Contato("Evandro", 5), new Contato("jose", 1));
//implementação da comparação vide http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/
contatos.sort(Comparator.comparing((contato) -> contato.nome+contato.numero));
//visualisando o resultado
contatos.forEach((dado) -> {
System.out.println(dado.nome + " " + dado.numero);
});
}
}