所以我有一个列表announceList
,其列表中包含Announces
,我试图按升序排列列表的百分比值,所以如果我得到了列表这样:
Announce1 - 20.10%
Announce2 - 20.54%
Announce3 - 27.50%
Announce4 - 76.36%
排序后我想要这样的列表:
Announce4 - 76.36%
Announce3 - 27.50%
Announce2 - 20.54%
Announce1 - 20.10%
我使用的方法是:
Collections.sort(announceList, new Comparator<Announce>() {
@Override
public int compare(Announce o1, Announce o2) {
int i1 = o1.getMatchPercentage().intValue();
int i2 = o2.getMatchPercentage().intValue();
return Integer.compare(i1, i2);
}
});
adapter.setAnnounceList(announceList);
adapter.notifyDataSetChanged();
但是我没有得到我想要的清单,如果你知道我做错了什么,请告诉我,任何帮助都会有所帮助,谢谢。
答案 0 :(得分:2)
如果您希望小数位数影响您的排序,则需要比较实际double/float
值,即避免74.5&gt; 74.9。此外,由于您希望排序按降序排列,因此您可以尝试使用Double.compare()
:
Collections.sort(announceList, new Comparator<Announce>() {
@Override
public int compare(Announce o1, Announce o2) {
return Double.compare(o2.getMatchPercentage(), o1.getMatchPercentage());
}
});
如果您使用的是Java 8或更高版本,您也可以这样做:
announceList.sort(Comparator.comparingDouble(Announce::getMatchPercentage).reversed());
这是一个使用普通双打的小例子:
public static void main(String[] args) {
List<Double> list = new ArrayList<Double>();
list.add(20.10);
list.add(20.54);
list.add(27.50);
list.add(76.36);
System.out.println("Before sort:");
for(Double d : list) {
System.out.println(d);
}
System.out.println();
Collections.sort(list, new Comparator<Double>() {
@Override
public int compare(Double o1, Double o2) {
return Double.compare(o2, o1);
}
});
System.out.println("After sort:");
for(Double d : list) {
System.out.println(d);
}
}
输出:
Before sort:
20.1
20.54
27.5
76.36
After sort:
76.36
27.5
20.54
20.1
答案 1 :(得分:2)
从Java 8开始,有一种更方便的方法来执行此类操作:
announceList.sort(Comparator.comparingDouble(Announce::getMatchPercentage).reversed());
忽略reversed()
以升序排序列表。
这使用了Java 8中新增的comparingDouble()
方法。
答案 2 :(得分:0)
来自Comparator::compare
比较其订单的两个参数。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
因此,为了对升序进行排序,您需要反转Integer.compare
的参数顺序,例如:
Integer.compare(i2, i1);
或者如评论中所建议的那样:
return o1.getMatchPercentage().intValue() -o2.getMatchPercentage().intValue();
但是,为了精确,您应该使用Double.compare