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

Java 按字段的自定义顺序对对象列表进行排序,java,list,sorting,collections,comparator,Java,List,Sorting,Collections,Comparator,问题 我有一个Student对象列表(我只是用这种方式编写了列表,以便它更具可读性): 我想根据部门的定制订单对这份清单进行排序 ["Maths", "Science", "English"] 最终排序的列表应如下所示: [   {"id": 2, "name": "some name 2", "department": "Maths"},   {"id": 3, "name": "some name 3", "department": "Science"},   {"id": 1

问题

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

我想根据部门的定制订单对这份清单进行排序

["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"}
]
我尝试的

  • 我迭代了列表,列出了所有部门的列表,并对所有列表进行了排序,最后,我将所有列表都加入了俱乐部。但它占用的空间太多,优化不够
  • 我尝试使用comparable,但使用它,我只能按字段对对象进行排序
  • 我想要什么

    我想按id排序,但在此之前。。我还想对各部门进行分类。部门的分类将基于部门列表。第一个应该是数学,第二个应该是科学,最后一个应该是英语


    我想要一些建议,比如如何以更好的性能实现这一点。

    您可以创建一个枚举,其中包含具有优先级的不同部门。 i、 e


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

    自定义排序顺序是什么?您尝试过的选项2,这不是您想要做的吗?i、 e.按字段排序,只是因为它是自定义订单。有什么问题吗?您只需在逻辑中添加所需的顺序,并基于该顺序返回值。(我宁愿建议一个更好的设计比较,而不是在这种情况下进行比较)不,这个问题与这个问题不同@daniuHow从Comparator@guriosoYes给出排名,我读了你的评论,但我应该如何做到这一点。我应该如何使用此hashmap实现比较器。我应该如何在比较器中使用此枚举?您可以在需要时调用比较器(顺便说一句,您可以创建自己的比较器来实现Java的比较器),并使用类似“list.stream().sorted(new YourComparatorClass())”的流对列表进行排序。
    [
        {"id": 2, "name": "some name 2", "department": "Maths"},
        {"id": 3, "name": "some name 3", "department": "Science"},
        {"id": 1, "name": "some name 1", "department": "English"}
    ]
    
    enum SchoolDepartmentEnum{
    ENGLISH(1,3,"English"),
    
    MATHS(2,1,"Maths"),
    
    SCIENCE(3,2,"Science");
    
    constructor:  SchoolDepartmentEnum(int id, int priority, string name);
    
    }