我有用户对象列表,我只想基于用户对象中的变量从列表中获取用户对象。

public class User {

    private int id;

    private String sex;

    private int age;

    private String country;

    /**
     * Getter and setter for all variables
     */
}

我有一个这样的模型课。现在,我有用户对象列表。
List<User> users = new ArrayList<User>();

如果用户是Male,我想从用户列表中获取对象。
List<User> ageList = new ArrayList<User>();
for(User object : users) {
    if(object.getSex().equals("Male")){
        ageList.add(object);
    }
}

我不喜欢上面的方法。有没有更好的方法基于object ..中的变量从对象列表中获取对象?

有Java Collections ..的功能吗?我们可以使用Java Comparator解决这个问题吗?

最佳答案

如果您使用的是Guava,则可以使用Collections2.filter:

Collection<User> males = Collections2.filter(users, new Predicate<User>() {
    @Override
    public boolean apply(User user) {
        return user.getSex().equals("Male");
    }
});

借助Java 8,您甚至可以做得更好:
Collection<User> males = Collections2.filter(users, user -> user.getSex().equals("Male"));

10-06 14:04
查看更多