Java 列表排序:先按供应商分数倒序,再按报价总额升序
假设我们有一个 List
首先按照供应商分数进行排序,可以使用下面的代码:
Collections.sort(sellers, new Comparator<Seller>() {
@Override
public int compare(Seller s1, Seller s2) {
if (s1.getScore() == null && s2.getScore() == null) {
return 0;
} else if (s1.getScore() == null) {
return 1;
} else if (s2.getScore() == null) {
return -1;
}
return s2.getScore().compareTo(s1.getScore());
}
});
这里使用了匿名内部类实现了 Comparator 接口,对于没有分数的供应商,我们认为它们是相等的,对于有分数的供应商,将它们按照分数倒序排序。
然后,如果供应商分数相同或为空,我们再按照报价总额进行升序排序,可以继续使用 Comparator 实现:
Collections.sort(sellers, new Comparator<Seller>() {
@Override
public int compare(Seller s1, Seller s2) {
if (s1.getScore() == null && s2.getScore() == null) {
return s1.getTotalQuote().compareTo(s2.getTotalQuote());
} else if (s1.getScore() == null) {
return 1;
} else if (s2.getScore() == null) {
return -1;
}
int scoreCompare = s2.getScore().compareTo(s1.getScore());
if (scoreCompare != 0) {
return scoreCompare;
}
return s1.getTotalQuote().compareTo(s2.getTotalQuote());
}
});
这里我们先判断供应商分数是否相同或为空,如果是,按照报价总额进行升序排序,否则按照分数倒序排序。注意,如果分数相同,我们还需要按照报价总额排序,因此最后返回 s1.getTotalQuote().compareTo(s2.getTotalQuote())。
使用这两个 Comparator,我们可以轻松地实现按照供应商分数倒序、报价总额升序排序的功能。
原文地址: http://www.cveoy.top/t/topic/nsYx 著作权归作者所有。请勿转载和采集!