按通用元素对对象数组列表进行排序

Sort Array List of objects by generic element

我有一个 Vertex class,它有一个字段 'element',它是一个通用类型 TVertex class 如下所示:

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();
}

}

我有 ArrayListVertex<T> 个对象,我想按顶点的元素对其进行排序。在我的应用程序中,顶点元素的类型可以是 IntegerDoubleString.

我尝试使用 Comparator 但我不确定它们是如何工作的,下面你可以看到我尝试实现的内容:

listOfNeighbours.sort(Comparator.comparing(Vertex::getElement));

其中 listOfNeighboursArrayListVertex<T> 个对象。我收到 Vertex::getElement 的错误消息说 'The type Vertex does not define getElement(Object) that is applicable here'

如果您查看 Comparator.comparing 通用参数的签名 U extends Comparable<? super U>

public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
        Function<? super T, ? extends U> keyExtractor)

这意味着 getElement returns 必须是 Comparable.

注意:这里输入T是Vertex,UgetElementreturns.

的类型

您可以通过在 Vertex class.

中制作 T extends Comparable<? super T> 来解决这个问题
class Vertex<T extends Comparable<? super T>>  {...}