Aparece uma mensagem de erro pois a classe precisa implementar a interface Comparator na Classe Recibo pois o TreeSet guarda os dados de maneira natural por isso necessita da interface Comparator.
Aparece uma mensagem de erro pois a classe precisa implementar a interface Comparator na Classe Recibo pois o TreeSet guarda os dados de maneira natural por isso necessita da interface Comparator.
Olá Cleiton!
O TreeSet guarda os elementos em sua ordem natural seguindo a estrutura de uma árvore, por isso é obrigatório existir uma forma de comparar os elementos. Você pode implementar a interface Comparable no tipo de elemento que está usando no TreeSet<Tipo>
ou usar o contrutor que recebe um Comparator<Tipo>
.
Por exemplo:
Tipo que implementa a interface Comparable
public class Tipo implements Comparable<Tipo> {
private final Integer id;
public Tipo(int id) {
this.id = id;
}
@Override
public int compareTo(Tipo o) {
return id.compareTo(o.id);
}
}
Tipo que não implementa Comparable
class TipoSemComparable {
private final Integer id;
TipoSemComparable(int id) {
this.id = id;
}
public Integer getId() {
return id;
}
}
class Main {
public static void main(String[] args) {
Tipo tipoComComparable = new Tipo(1);
TipoSemComparable tipoSemComparable = new TipoSemComparable(2);
TreeSet<Tipo> arvoreDeTipoComComparable = new TreeSet<>();
arvoreDeTipoComComparable.add(tipoComComparable);
arvoreDeTipoComComparable.forEach(System.out::println);
TreeSet<TipoSemComparable> arvoreDeTipoSemComparable = new TreeSet<>(
Comparator.comparing(TipoSemComparable::getId));
arvoreDeTipoSemComparable.add(tipoSemComparable);
arvoreDeTipoSemComparable.forEach(System.out::println);
TreeSet<TipoSemComparable> vaiDarErro = new TreeSet<>();
vaiDarErro.add(tipoSemComparable); // nessa linha vai haver um ClassCastException, pois não é Comparável (implementa Comparable)
}
}