根据对象中的变量从对象列表中获取对象

aru*_*net 8 java collections list comparator

我有User对象列表,我只想根据User对象中的变量从List中获取User对象.

public class User {

    private int id;

    private String sex;

    private int age;

    private String country;

    /**
     * Getter and setter for all variables
     */
}
Run Code Online (Sandbox Code Playgroud)

我有这样的模型类.现在我有User对象列表.

List<User> users = new ArrayList<User>();
Run Code Online (Sandbox Code Playgroud)

如果用户是男性,我想从用户列表中获取对象.

List<User> ageList = new ArrayList<User>();
for(User object : users) {
    if(object.getSex().equals("Male")){
        ageList.add(object);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*ung 8

如果你正在使用番石榴,你可以使用Collections2.filter:

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

使用Java 8,您可以做得更好:

Collection<User> males = Collections2.filter(users, user -> user.getSex().equals("Male"));
Run Code Online (Sandbox Code Playgroud)

  • 我不喜欢这个符号的原因是它更长,并添加了一些后来阅读它的人可能不熟悉的库/方法。遗憾的是 Java 没有更好地支持这个用例(就像几乎所有其他流行语言一样:P) (2认同)