I have a class Vertex which has a field element of generic type T.
I have an ArrayList of Vertex objects which I would like to sort but I am not sure how.
I tried using a Comparator which can be seen below:
listOfNeighbours.sort(new Comparator<Vertex<T>>() {
@Override
public int compare(Vertex<T> v1, Vertex<T> v2) {
if(v1.getElement() == v2.getElement()){
return 0;
}else if(v1.getElement() < v2.getElement()) {
return -1;
}else {
return 1;
}
}
});
Obviously, the solution above is wrong as we are not able to compare generics but I would like something similar to this that will sort my list of Vertex objects.
In my application T can either be an Integer, Double or String.
Any help is appreciated!
Thank you.
EDIT: My Vertex class is below:
public class Vertex<T>{
private ObjectProperty<T> element;
private BooleanProperty visited;
public Vertex() {
element = null;
visited = new SimpleBooleanProperty(false);
}
public Vertex(T element) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(false);
}
public Vertex(T element, boolean visited) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(visited);
}
public void setElement(T elem) {
this.element.set(elem);
}
public T getElement() {
return this.element.get();
}
public ObjectProperty<T> elementProperty(){
return this.element;
}
public void setVisited(boolean b) {
this.visited.set(b);
}
public boolean isVisited() {
return this.visited.get();
}
public BooleanProperty visitedProperty(){
return this.visited;
}
@Override
public boolean equals(Object o) {
if(o == this) {
return true;
}
if(!(o instanceof Vertex<?>)) {
return false;
}
Vertex<?> v= (Vertex<?>) o;
if(v.getElement() instanceof String) {
return v.getElement().equals(this.element.get());
}else {
return v.getElement() == this.element.get();
}
}
@Override
public String toString() {
return element.get().toString();
}
}
v1.getElement() == v2.getElement()is not a comparison, it just checks memory addresses. Your code should just bereturn v1.getElement().compareTo(v2.getElement()). Vertex Element must implementComparable.