我有一个成员
类,如下所示:
public class Member {
private int value1;
private boolean value2;
}
和一个数组列表
价值1-价值2
1-错误
现在我希望这些数据按如下方式排序:
必须首先返回value2
为true的成员,然后返回后面的其他成员
- 在每个子列表中,将从最高到最低返回成员
所以最后,列表应该按以下顺序包含数据: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();
}
});
但是有没有办法在同一个
比较
方法中按两个标准对数据进行排序?
谢谢你的帮助。
您可以先通过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;
}
});
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());
问题内容: 假设我有两个类CLassA和CLassB。它们有一个共同的属性,例如每个类拥有的元素数量。 我如何从ClassA和CLassB的对象创建一个集合,并按该属性排序(降序升序无所谓)? 我收集了一个类型,但是当我尝试实现Comparable Interface时,我无法使用该方法(例如,获取返回元素nr的get)。 我有什么解决方案? 谢谢你的帮助! 问题答案: 实际上,如果要将它们放在同
问题内容: 我有以下文件的仓库集合: 我试图像这样查询它(其Firestore Web SDK) and 的组合来自Firestore:通过startsWith字符串查询文档,因此具有功能(不在此问题范围内)。 它导致以下错误: FirebaseError:无效查询 。不等式(<,<=,>或> =)的所有过滤器必须位于同一字段上。但是您在’start.geohash’和’destination.g
问题内容: 我有很多对象。 如何按名称和年龄先后按字母顺序对该数组排序? 您将使用哪种算法? 问题答案: 你可以使用以下方法: 现在按名称排序,然后按年龄排序。 “从字典上比较两个字符串”-来自docs。 是本机库中的静态方法。它会进行实际的排序,你只需要提供一个即可定义应该如何比较列表中的两个元素:这是通过提供你自己的方法实现来实现的。
我有对象数组。 如何按名称和年龄按字母顺序对该数组进行排序? 你会使用哪种算法?
问题内容: 我有一个奇怪的清单,以下列方式建立: 我想先按数字(desc)排序,然后如果数字相同,则按名称(asc)排序。所以我想要的结果是: 我试图考虑可以在sort方法中使用的lambda函数,但是我不确定是否可以这样做。 问题答案: python中的sort函数允许将函数作为sort键传递: 编辑: 1.排序顺序 2.演示复制和就地排序