按两个条件比较两个对象

use*_*325 6 java comparator

我有一个包含布尔字段的类用户,我想对用户列表进行排序,我希望具有布尔字段等于true的用户位于列表的顶部,而不是我希望按名称对它们进行排序.这是我的班级:

public class User{
    int id;
    String name;
    boolean myBooleanField;
    public User(int id, String name, boolean myBooleanField){
        this.id = id;
        this.name = name;
        this.myBooleanField = myBooleanField;
    }

    @Override
    public boolean equals(Object obj) {
        return this.id == ((User) obj).id;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个清除我想要的例子:让我说我有这个用户集合:

ArrayList<User> users = new ArrayList<User>();
users.add(new User(1,"user1",false));
users.add(new User(2,"user2",true));
users.add(new User(3,"user3",true));
users.add(new User(4,"user4",false));
Collections.sort(users, new Comparator<User>() {
    @Override
    public int compare(User u1, User u2) {
        //Here i'm lookin for what should i add to compare the two users depending to the boolean field
        return u1.name.compareTo(u2.name);
    }
});
for(User u : users){
    System.out.println(u.name);
}
Run Code Online (Sandbox Code Playgroud)

我想对用户进行排序以获得此结果:

user2
user3
user1
user4
Run Code Online (Sandbox Code Playgroud)

mko*_*bit 3

您可以Boolean.compare(boolean x, boolean y)先使用该方法。由于true元素被排序到数组的开头,因此您可以使用compare(u2.myBooleanField, u1.myBooleanField)

@Override
public int compare(User u1, User u2) {
    final int booleanCompare = Boolean.compare(u2.myBooleanField,
                                               u1.myBooleanField);
    if (booleanCompare != 0) {
        return booleanCompare;
    }
    return u1.name.compareTo(u2.name);
}
Run Code Online (Sandbox Code Playgroud)