我有一个Shape
类,在这个类中有一个名为getRepr()
的方法可以获得形状的char
表示。例如,
ShapeA.getRepr() ->'a'
ShapeB.getRepr() ->'b'
ShapeC.getRepr() ->'c'
现在我有一个ArrayList
可存储多种形状,包括ShapeE
,ShapeA
,ShapeD
,ShapeC
和ShapeB
。
问题是如何根据Collections.sort()
表示法在ArrayList
中使用char
按字母顺序重新排列这些形状?
排序后此ArrayList
的预期结果应为ShapeA
,ShapeB
,ShapeC
,ShapeD
,ShapeE
。
或者有没有办法在没有Collections.sort()
的情况下达到这个目的?
答案 0 :(得分:5)
您需要在SuperClass中实现Comparable接口
public class MyClassSuperClass implements Comparable<MyClassSuperClass>{
@Override
public int compareTo(MyClassSuperClass o) {
return this.getRepr().compareTo(o.getRepr());
}
}
然后你可以在你的集合上调用.sort方法
对于数学倾向,定义自然的关系 对给定类C的排序是:
{(x, y) such that x.compareTo(y) <= 0}. The quotient for this total order is: {(x, y) such that x.compareTo(y) == 0}. It follows immediately from the contract for compareTo that the quotient is an
C上的等价关系,自然排序是总和 C.当我们说一个类的自然顺序是一致的时候 与equals,我们的意思是自然排序的商是 由类的equals(Object)方法定义的等价关系: {(x,y)使得x.equals(y)}。
有关详细信息,请查看此链接:
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
答案 1 :(得分:0)
这已在这里得到解答: Alphabetically Sort a Java Collection based upon the 'toString' value of its member items
Collections.sort(list,
new Comparator<String>()
{
public int compare(String s1, String s2)
{
return s1.compareTo(s2);
}
});
答案 2 :(得分:0)
您可以使用Comparable / Comparator来实现此目的,请查看此链接以获取详细信息Object Ordering