我试图实现对存储在列表中的对象字段值的排序。
我找到了下面的解决方案来比较字符串,但是我如何比较字符串值并相应地排序?
我想先排序"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()));
为此,你需要一个比较类,它将比较两个学生,在这种情况下,如果你希望当一个学生的状态为“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'}]
字符串“Y”按字典顺序排在“N”之后,因此需要颠倒默认顺序。
有一些方法可以做到这一点,一个是否定比较函数的结果:
收藏。排序(ar,(a,b)-
另一个是更改操作数的顺序:
收藏。排序(ar,(a,b)-
如果我理解正确,您需要引用方法getStatus()及其自然顺序排序
ar.sort(Comparator.comparing(Student::getStatus));
如果需要倒序
ar.sort(Comparator.comparing(Student::getStatus).reversed());
问题内容: 如何按降序对列表进行排序? 问题答案: 在一行中,使用: 将函数传递给:
问题内容: 如何在如下所示的SQLAlchemy查询中使用ORDER BY ? 此查询有效,但以升序返回: 如果我尝试: 然后我得到:。 问题答案: 来自@ jpmc26的用法
所以我有一个列表视图,我想在其中按降序排列NumberOfRecords。我有一个自定义数组适配器,但在将数据放入ArrayList之前,我调用了排序类,这是我接收JSON的异步任务: 这是我的排序类: } 但我得到的结果是: 我的排序实现错了吗?或者我应该在返回之前把它解析成整数吗?
问题内容: 我正在尝试编写一个函数,该函数将测试列表是否按降序排列。到目前为止,这是我所拥有的,但似乎不适用于所有列表。 我使用了列表,它返回了。 我似乎无法弄清楚我的错误在哪里。 问题答案: 您宁可进行反向检查(一旦获得,则返回false
我有一个包含下一个数据的ArrayList:(int)、(int)、(int)、(String)。我按字段对此数组进行排序。如果长度与提交的相等,我如何赋予优先级(优先级将具有具有水平位置的长度)。例如,给定输入: 输出应为: 以下是我所拥有的:
我想在不使用数组的情况下按降序排列数字。当我使用字符串时,它给出了运行时错误。例如: 这是我写的,但问题是第一个数字没有打印出来,这不是预期的输出。