java - 如何按私有字段对列表进行排序?
问题描述
我的实体类如下所示:
public class Student {
private int grade;
// other fields and methods
}
我像这样使用它:
List<Student> students = ...;
考虑到它是一个私有字段,students
我该如何排序?grade
解决方案
您有以下选择:
- 使
grade
可见 - 定义一个getter方法
grade
- 定义一个
Comparator
内部Student
- 制作
Student
工具Comparable
使用反射(在我看来这不是一个解决方案,它是一种解决方法/黑客)
解决方案示例3
:
public class Student {
private int grade;
public static Comparator<Student> byGrade = Comparator.comparing(s -> s.grade);
}
并像这样使用它:
List<Student> students = Arrays.asList(student2, student3, student1);
students.sort(Student.byGrade);
System.out.println(students);
这是我最喜欢的解决方案,因为:
- 您可以轻松定义几个
Comparator
s - 代码不多
- 您的字段保持私有和封装
解决方案示例4
:
public class Student implements Comparable {
private int grade;
@Override
public int compareTo(Object other) {
if (other instanceof Student) {
return Integer.compare(this.grade, ((Student) other).grade);
}
return -1;
}
}
您可以像这样在任何地方进行排序:
List<Student> students = Arrays.asList(student2, student3, student1);
Collections.sort(students);
System.out.println(students);
此解决方案的方面:
- 这定义了,排序依据
grade
代表学生的自然顺序 - 一些预先存在的方法会自动排序(如
TreeMap
)
推荐阅读
- mysql - 为什么 Laravel 在 DB::listen 之后重定向到错误的 id?
- php - 如何将一个雄辩的结果变成一个数组 Laravel
- windows-installer - 如何在 NSIS 中同时显示两个自定义页面(某些 exe 和进度条的静默安装)
- ruby-on-rails - 禁止密码与账户 ID 或用户 ID 相同 [Ruby on Rails]
- matplotlib - 幻灯片更新后的 Matplotlib fill_between 不会重绘
- material-ui - 锚元素外部化到另一个组件时弹出菜单位置不正确
- angular - Angular:在窗口的事件侦听器中引用当前组件
- android - 从 android studio 将动态实时位置 GPS 坐标发布到服务器
- java - 如何在java spring中将对象转换为字符串
- php - Android 错误:值
目前,我创建了一个具有登录功能的应用程序。要从 android 连接到 MySQL 数据库,我使用 PHP。当我使用 MySQLi 时,一切正常。但是当我转换为 PDO 时,错误将与我的问题标题相同。谁能知道是什么问题?下面是我的PHP代码: