Implementa a interface SortedSet e por isso oferece a possibilidade de ordenação dos objetos adicionados. Pra conseguir ordenar um objeto, é necessário que este implemente as interfaces Comparable ou Comparator. No caso do Wrapper String, já incorpora a interface Comparable.
Uma variável do tipo de interface Set pode receber um objeto das classes HashSet, TreeSet ou LinkedHashSet.
Exemplo de uso TreeSet:
package TreeSet; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; public class Main { public static void main(String[] args) { SortedSet<String> lista = new TreeSet<String>(); lista.add("Ferran Gonzalez Alonso"); lista.add("Sergio Gonzalez Alonso"); lista.add("Jordi Gonzalez Alonso"); lista.add("Alex"); // Não irá adicionar elementos repetidos lista.add("Jordi Gonzalez Alonso"); // Mostramos os elementos da lista System.out.println(lista); // Mostramos iterando Iterator<String> it = lista.iterator(); while (it.hasNext()) { Object o = it.next(); System.out.println(o); } } }
Exemplo com uma classe modelo implementando a interface Comparable:
package TreeSet; public class ContaCorrenteComparable implements Comparable<ContaCorrenteComparable> { private int conta; private int agencia; private double saldo; private String nome; public ContaCorrenteComparable(int conta, int agencia, double saldo, String nome) { this.conta = conta; this.agencia = agencia; this.saldo = saldo; this.nome = nome; } public int getConta() { return conta; } public void setConta(int conta) { this.conta = conta; } public int getAgencia() { return agencia; } public void setAgencia(int agencia) { this.agencia = agencia; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } @Override public int compareTo(ContaCorrenteComparable outraConta) { int outroValor = outraConta.getConta(); if (this.getConta() > outroValor) { return 1; } else { if (this.getConta() < outroValor) { return -1; } } return 0; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + conta; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ContaCorrenteComparable other = (ContaCorrenteComparable) obj; if (conta != other.conta) return false; return true; } }
É obrigatória a implementação do método compareTo quando estamos utilizando a interface Comparable, pois este método quem vai disponibilizar a ordenação automática. Neste caso estamos realizando a ordenação por conta, da mesma maneira garantimos com o método hashCode e equals que caso seja inserido uma conta com o mesmo número, não irá ser inserida na lista, pois é uma lista TreeSet
Classe Main:
package TreeSet; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Collection; import java.util.Iterator; import java.util.Locale; import java.util.SortedSet; import java.util.TreeSet; public class ContaMain { public static void main(String[] args) { new ContaMain().processar(); } public void processar(){ // Criamos a uma lista do tipo TreeSet SortedSet<ContaCorrenteComparable> c = new TreeSet<>(); // Adicionamos os elementos c.add(new ContaCorrenteComparable(99, 77, 0, "Ferran")); c.add(new ContaCorrenteComparable(01, 78, 5, "Sergio")); c.add(new ContaCorrenteComparable(77, 79, 1, "Jordi")); c.add(new ContaCorrenteComparable(0, 0, 0, "Jordi")); // Chamamos o método imprimir pra mostrar os elementos imprimir(c); } public void imprimir(Collection<ContaCorrenteComparable> set){ Iterator<ContaCorrenteComparable> it = set.iterator(); System.out.println("Conta\t\tSaldo\t\tAgencia\t\tNome\n"); NumberFormat formatarString, formatarValor; formatarString = new DecimalFormat("0000"); formatarValor = DecimalFormat.getCurrencyInstance(new Locale("pt", "BR")); formatarValor.setMinimumFractionDigits(2); while (it.hasNext()) { ContaCorrenteComparable c = it.next(); System.out.println(formatarString.format(c.getConta()) + "\t\t" + formatarValor.format(c.getSaldo()) + "\t\t" + formatarString.format(c.getAgencia()) + "\t\t" + c.getNome()); } } }
0 comentarios:
Postar um comentário