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

如何按字段降序排列列表?[重复]

瞿宏儒
2023-03-14

我试图实现对存储在列表中的对象字段值的排序。

我找到了下面的解决方案来比较字符串,但是我如何比较字符串值并相应地排序?

我想先排序"Y"状态值然后"N"

class Student {
    int rollno;
    String name, status;

    // Constructor
    public Student(int rollno, String name,
        String status) {
        this.rollno = rollno;
        this.name = name;
        this.status = status;
    }

    public String getStatus() {
        return status;
    }

}
ArrayList < Student > ar = new ArrayList < Student > ();
ar.add(new Student(111, "bbbb", "Y"));
ar.add(new Student(131, "aaaa", "N"));
ar.add(new Student(121, "cccc", "Y"));

Collections.sort(ar, (a, b) - > a.getStatus().compareTo(b.getStatus()));

共有3个答案

濮金鑫
2023-03-14

为此,你需要一个比较类,它将比较两个学生,在这种情况下,如果你希望当一个学生的状态为“Y”时,它在“N”之前排序,你需要这样的东西:

    public static class StudentComparator implements Comparator<Student> {

    @Override
    public int compare(Student o1, Student o2) {
        // Compare the students, return -1 if o1 is "greater" than o2. Return 1 if o2 is "greater" than o1
        if (o1.status.equals("Y")) return -1;
        if (o2.status.equals("Y")) return 1;
        return 0;
    }
}

然后你可以这样比较:

    List<Student> ar = new ArrayList<Student>();
    ar.add(new Student(111, "bbbb", "Y"));
    ar.add(new Student(131, "aaaa", "N"));
    ar.add(new Student(121, "cccc", "Y"));

    Collections.sort(ar, new StudentComparator());

输出:

[Student{rollno=121, name='cccc', status='Y'}, Student{rollno=111, name='bbbb', status='Y'}, Student{rollno=131, name='aaaa', status='N'}]
柴琦
2023-03-14

字符串“Y”按字典顺序排在“N”之后,因此需要颠倒默认顺序。

有一些方法可以做到这一点,一个是否定比较函数的结果:

收藏。排序(ar,(a,b)-

另一个是更改操作数的顺序:

收藏。排序(ar,(a,b)-

东郭宏深
2023-03-14

如果我理解正确,您需要引用方法getStatus()及其自然顺序排序

ar.sort(Comparator.comparing(Student::getStatus));

如果需要倒序

ar.sort(Comparator.comparing(Student::getStatus).reversed());
 类似资料:
  • 问题内容: 如何按降序对列表进行排序? 问题答案: 在一行中,使用: 将函数传递给:

  • 问题内容: 如何在如下所示的SQLAlchemy查询中使用ORDER BY ? 此查询有效,但以升序返回: 如果我尝试: 然后我得到:。 问题答案: 来自@ jpmc26的用法

  • 所以我有一个列表视图,我想在其中按降序排列NumberOfRecords。我有一个自定义数组适配器,但在将数据放入ArrayList之前,我调用了排序类,这是我接收JSON的异步任务: 这是我的排序类: } 但我得到的结果是: 我的排序实现错了吗?或者我应该在返回之前把它解析成整数吗?

  • 问题内容: 我正在尝试编写一个函数,该函数将测试列表是否按降序排列。到目前为止,这是我所拥有的,但似乎不适用于所有列表。 我使用了列表,它返回了。 我似乎无法弄清楚我的错误在哪里。 问题答案: 您宁可进行反向检查(一旦获得,则返回false

  • 我尝试了,但它是按升序排序的。也按升序排序。我查看了stackoverflow,发现的答案都是过时的或引用了RDDS。我想在Spark中使用原生的dataframe。

  • 我有一个包含下一个数据的ArrayList:(int)、(int)、(int)、(String)。我按字段对此数组进行排序。如果长度与提交的相等,我如何赋予优先级(优先级将具有具有水平位置的长度)。例如,给定输入: 输出应为: 以下是我所拥有的: