我有一个Member
类,如下所示:
public class Member {
private int value1;
private boolean value2;
}
包含此数据的ArrayList<Member>
:
value1 - value2
现在我希望以这种方式对这些数据进行排序:
value2
为true的成员,然后返回value1
所以最后,列表应该按以下顺序包含数据:5,3,4,2,1。
我知道我可以使用Collections.sort()
按值1对数据进行排序:
Collections.sort(memberList, new Comparator<Member>(){
public int compare(Member m1, Member m2){
return m1.getValue1() - m2.getValue1();
}
});
但是有没有办法按同一个compare
方法对这两个标准数据进行排序?
感谢您的帮助。
答案 0 :(得分:2)
您可以先按value2
进行比较,然后按value1
比较平局:
Collections.sort(memberList, new Comparator<Member>(){
public int compare(Member m1, Member m2){
int comp = Boolean.compare(m1.getValue2(), m2.getValue2());
if (comp == 0) {
// case where 'value2' is the same for both inputs
// in this case use 'value1' to compare
comp = m1.getValue1() - m2.getValue1();
}
return comp;
}
});
答案 1 :(得分:2)
Collections.sort(memberList, new Comparator<Member>(){
public int compare(Member m1, Member m2){
int res = Boolean.compare(m2.getValue2(), m1.getValue2());
if(res == 0) res = Integer.compare(m2.getValue1(), m1.getValue1());
return res;
}
});
这可以在Java-8中更简单地完成:
Collections.sort(memberList,
Comparator.comparing(Member::getValue2).thenComparing(Member::getValue1).reversed());