按通用元素对对象数组列表进行排序
Sort Array List of objects by generic element
我有一个 Vertex
class,它有一个字段 'element',它是一个通用类型 T
。 Vertex
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();
}
}
我有 ArrayList
个 Vertex<T>
个对象,我想按顶点的元素对其进行排序。在我的应用程序中,顶点元素的类型可以是 Integer
、Double
或 String
.
我尝试使用 Comparator
但我不确定它们是如何工作的,下面你可以看到我尝试实现的内容:
listOfNeighbours.sort(Comparator.comparing(Vertex::getElement));
其中 listOfNeighbours
是 ArrayList
个 Vertex<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,U
是getElement
returns.
的类型
您可以通过在 Vertex class.
中制作 T
extends Comparable<? super T>
来解决这个问题
class Vertex<T extends Comparable<? super T>> {...}
我有一个 Vertex
class,它有一个字段 'element',它是一个通用类型 T
。 Vertex
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();
}
}
我有 ArrayList
个 Vertex<T>
个对象,我想按顶点的元素对其进行排序。在我的应用程序中,顶点元素的类型可以是 Integer
、Double
或 String
.
我尝试使用 Comparator
但我不确定它们是如何工作的,下面你可以看到我尝试实现的内容:
listOfNeighbours.sort(Comparator.comparing(Vertex::getElement));
其中 listOfNeighbours
是 ArrayList
个 Vertex<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,U
是getElement
returns.
您可以通过在 Vertex class.
中制作T
extends Comparable<? super T>
来解决这个问题
class Vertex<T extends Comparable<? super T>> {...}