java - 如何在两个不同的字段上使用 Collections.sort()?

标签 java sorting arraylist collections

<分区>

我有一个 Member像这样上课:

public class Member {
    private int value1;
    private boolean value2;
}

还有一个 ArrayList<Member>包含此数据:

值 1 - 值 2

  • 1 - 错误
  • 2 - 错误
  • 3 - 正确
  • 4 - 错误
  • 5 - 正确

现在我希望以这种方式对这些数据进行排序:

  • value2 的成员因为 true 必须首先返回,然后是其他的
  • 在每个子列表中,成员将从最高到最低返回value1

所以最后,列表应该按以下顺序包含数据:5、3、4、2、1。

我知道我可以使用 Collections.sort()按 value1 对数据进行排序:

Collections.sort(memberList, new Comparator<Member>(){
    public int compare(Member m1, Member m2){
        return m1.getValue1() - m2.getValue1();
    }
});

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

感谢您的帮助。

最佳答案

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

关于java - 如何在两个不同的字段上使用 Collections.sort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32837163/

相关文章:

c - C 中用于搜索排序数组的内置函数

android - 如何连接删除按钮以删除 ListView 中的一个项目?

java - ArrayList 的 ArrayList。如何删除数组内部的一项?

java - 带有供应商参数的 Collectors.toMap

java - 如何捕捉 GroovyShell 输出?

MySQL order by convert varchar as unsigned 并将 "0"排序到最后

c - 按指针在 C 中指向的值对指针进行排序

java - Cassandra 的赫克托VS阿斯蒂亚纳克斯

java - 用于 XML 编程的 API

javascript - Javascript 中的数组列表