2
respostas

JAVA COLLECTION

Após criar um Comparator estou obtendo resultados diferentes quando crio uma Lista e faço um .sort() após ter populado a mesma, e quando crio um Set com o mesmo comparador. Alguém pode me explicar o por que? (o resultado desejado é o obtido com a lista).

import java.util.Comparator;

public class ComparadorDistancia implements Comparator<Balao>{
    public int[] origem = new int[2];

    public ComparadorDistancia(int[] origem){
        this.origem = origem;
    }

    @Override
    public int compare(Balao o1, Balao o2) {
        int x = this.origem[0];
        int y = this.origem[1];
        double distancia1 = Math.hypot(o1.pos[0] - x, o1.pos[1] - y);
        double distancia2 = Math.hypot(o2.pos[0] - x, o2.pos[1] - y);
        if(distancia1 < distancia2) return -1;
        if(distancia1 > distancia2) return 1;
        return 0;
    }

}
import java.util.*;

public class Balao extends Comutador{
//    public List<Balao> Vizinhos = new LinkedList<>();
    public Set<Balao> Vizinhos = new TreeSet<>(new ComparadorDistancia(this.pos));

    public Balao(int posX, int posY) {
        super(posX, posY);
        Balaos.stream()
                .filter(b -> Math.hypot(b.pos[0] - this.pos[0], b.pos[1] - this.pos[1]) < 200)
                .forEach(z ->{
                    z.Vizinhos.add(this);
                    this.Vizinhos.add(z);
                });
        Balaos.add(this);

    }

    @Override
    public String toString() {
        return "("+this.pos[0]+","+this.pos[1]+")";
    }

}
import java.util.LinkedList;
import java.util.List;

public abstract class Comutador{
    public int[] pos = new int[2];
    public static List<Balao> Balaos = new LinkedList<>();

    public Comutador(int x,int y){
        this.pos[0]=x;
        this.pos[1]=y;
    }

}
2 respostas

Oi Guilherme, para mim ainda não está clara a pergunta. Um set não tem método de ordenação, justamente porque ele não mantém ordem dos elementos.

Ola, seria um TreeSet no caso.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software