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

时间:2019-01-16 13:49:37

标签: java sorting generics arraylist comparator

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

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

}

我有一个ArrayList个对象,Vertex<T>个我想按顶点元素排序。在我的应用程序中,顶点元素的类型可以是IntegerDoubleString

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

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

其中listOfNeighboursArrayList个对象的Vertex<T>。我收到Vertex::getElement的错误消息,说'顶点类型未定义适用于此的getElement(Object)'

1 个答案:

答案 0 :(得分:0)

如果您查看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返回的值必须为Comparable

注意:这里的T类型是Vertex,UgetElement返回的类型。

您可以通过在Vertex类中使T扩展Comparable<? super T>来解决此问题。

class Vertex<T extends Comparable<? super T>>  {...}
相关问题