2 回答
TA贡献1780条经验 获得超5个赞
您的Pair
类应该实现Comparable<Pair<T, U>>
而不是Comparable<T, U>
,这是一种不存在的类型。您还应该确保T
和U
具有可比性。
界面中有很多有用的方法Comparator
可以帮助您比较事物。您可以使用它们来实现Comparable<Pair<T, U>>
. 事实上,您不需要实现Comparable
对列表进行排序。您只需要创建一个Comparator
!
以下是如何实施Comparable
:
class Pair<T extends Comparable<T>, U extends Comparable<U>> implements Comparable<Pair<T, U>> {
public int compare(final Pair<T, U> p1, final Pair<T, U> p2)
{
// this first compares the first field. If the first fields are the same, the second fields are compared
// If you have a different requirement, implement it accordingly.
return Comparator.comparing(Pair::getFirst).thenComparing(Pair::getSecond).compare(p1, p2);
}
}
要对列表进行排序,请执行以下操作:
list.sort(Comparator.comparing(Pair::getFirst).thenComparing(Pair::getSecond));
要仅使用第二个字段对列表进行排序,请执行以下操作:
list.sort(Comparator.comparing(Pair::getSecond));
TA贡献1831条经验 获得超4个赞
您应该确保您的T和U类型扩展Comparable并使您的Pair类实现Comparable<Pair<T,U>>:
public class Pair<T extends Comparable<T>, U extends Comparable<U>> implements Comparable<Pair<T,U>> {
private final T first;
private final U second;
public Pair(T first_, U second_) {
first = first_;
second = second_;}
public T getFirst() { return first; }
public U getSecond() { return second; }
@Override
public int compareTo(Pair<T, U> o) {
return this.second.compareTo(o.second);
}
}
添加回答
举报