【发布时间】:2016-04-11 08:12:00
【问题描述】:
我正在使用 arreyList 中的 Comparator 对类对象进行排序,我是
根据名称的字母顺序获取排序的对象
如果低于则比较器的来源
public static Comparator<SortingObjects StuNameComparator = new Comparator<SortingObjects() {
public int compare(SortingObjects s1, SortingObjects s2) {
String StudentName1 = s1.getName().toUpperCase();
String StudentName2 = s2.getName().toUpperCase();
int c;
c = StudentName1.compareTo(StudentName2);
if(c==0){
int rollno1 = s1.getPrice();
int rollno2 = s2.getPrice();
c = rollno1-rollno2;
}
return c;
}};
它给出的结果如下:
Student Name Sorting:
[ name=AP, price =0]
[ name=AP, price =0]
[ name=AP, price =0]
[ name=AP, price =0]
[ name=CH, price =0]
[ name=CH, price =0]
[ name=CH, price =0]
[ name=CH, price =0]
[ name=KE, price =0]
[ name=KE, price =0]
[ name=TN, price =0]
但我想要这样的输出:
[ name=CH, price =3]
[ name=CH, price =10]
[ name=AP, price =2]
[ name=AP, price =2]
[ name=AP, price =7]
[ name=AP, price =10]
[ name=TN, price =15]
[ name=KE, price =2]
[ name=KE, price =5]
这意味着:“CH”首先出现,然后是“AP”,然后是“TN”,最后是
“KE”有什么方法可以实现比较方法,这样我就可以得到
结果由自己定义的排序
【问题讨论】:
-
您的问题似乎出在
SortingObject类中,而不是比较本身,因为输出仅显示price=0。您可能想为我们添加这个类以便找到问题。 -
只有名称或价格,无法按你的意愿排序,毕竟它不遵循任何顺序。
-
您正在寻找什么类型的订单?您的询问没有定义任何顺序。
-
不要使用减法来比较整数(例如
c = rollno1-rollno2;) - 使用Integer.compare。减法可能会溢出。 -
你重写了sortingObjects类中的equals和hashcode方法了吗?
标签: java sorting arraylist collections