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