有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中如何根据枚举字段对一组对象进行排序

我猜我们有这样的枚举

enum Role{ MANAGER, ADMIN, USER }

我们还有课

public class User{
     String userName;
     Role userRole;
}

然后我们有一组用户。我想根据角色枚举对此用户集进行排序。 具有管理员角色的用户必须排在第一位,具有用户角色的用户必须排在集合的末尾


共 (2) 个答案

  1. # 1 楼答案

    使User类实现Comparable接口如下:

    public class Test {
        public static void main(String[] args) throws Exception {
            Set<User> set = new TreeSet<>();
            set.add(new User("a", Role.USER));
            set.add(new User("b", Role.MANAGER));
            set.add(new User("c", Role.ADMIN));
            
            System.out.println(set);
        }
    }
    
    enum Role{ MANAGER, ADMIN, USER }
    
    class User implements Comparable<User> {
        String userName;
        Role userRole;
        
        public User(String name, Role role) {
            this.userName = name;
            this.userRole = role;
        }
        
        @Override
        public int compareTo(User o) {
            
            return this.userRole.compareTo(o.userRole);
        }
        
        public String toString() {
            return this.userName;
        }
    }
    

    输出:

    [b, c, a]
    
  2. # 2 楼答案

    假设在名为yourList的列表中有这些值。当然,如果这更符合您的需要,您可以直接添加到集合中

    SortedSet<User> set = new TreeSet<User>(Comparator.comparing(User::userRole)
       .thenComparing(User::userName));
    set.addAll(yourList)