按字段的自定义顺序对对象列表进行排序

时间:2019-12-09 11:41:15

标签: java list sorting collections comparator

问题

我有一个Student对象的列表(我只是以这种方式编写了列表,以使其更具可读性):

class Student {
    int id;
    String name;
    String department;
}

[
    {"id": 1, "name": "some name 1", "department": "English"},
    {"id": 2, "name": "some name 2", "department": "Maths"},
    {"id": 3, "name": "some name 3", "department": "Science"}
]

我想根据部门的自定义顺序对该列表进行排序。

["Maths", "Science", "English"]

最终排序的列表应类似于:

[
    {"id": 2, "name": "some name 2", "department": "Maths"},
    {"id": 3, "name": "some name 3", "department": "Science"},
    {"id": 1, "name": "some name 1", "department": "English"}
]

我尝试过的事情

  1. 我对列表进行了迭代,并列出了所有部门的列表,并对所有列表进行了排序,最后,我汇总了所有列表。但是占用过多空间并不能充分优化。
  2. 我尝试使用可比对象,但只能通过字段对对象进行排序。

我想要的

我想按ID排序,但在此之前..我也想对部门排序。部门的排序将基于部门列表。第一个应该是数学,第二个应该是科学,最后一个应该是英语。

我需要一些建议,例如如何以更好的性能实现这一目标。

1 个答案:

答案 0 :(得分:1)

您可以创建一个枚举,其中包含不同部门的优先级。 即

enum SchoolDepartmentEnum{
ENGLISH(1,3,"English"),

MATHS(2,1,"Maths"),

SCIENCE(3,2,"Science");

constructor:  SchoolDepartmentEnum(int id, int priority, string name);

}

然后创建一个Comparator类,该类将使用您创建的枚举中的优先级ID。