当前位置: 首页 > 知识库问答 >
问题:

如何使用集合。排序()在两个不同的字段上?[重复]

通飞尘
2023-03-14

我有一个成员类,如下所示:

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();
    }
});

但是有没有办法在同一个比较方法中按两个标准对数据进行排序?

谢谢你的帮助。


共有2个答案

咸臻
2023-03-14

您可以先通过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;
    }
});
孙阳舒
2023-03-14
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.演示复制和就地排序