过滤数组列表或列表中的自定义对象

时间:2018-01-31 10:18:31

标签: android list arraylist filter

我在数组列表中有50个自定义类(类名:Student)对象。

public class Student {

    private String name;
    private String age;
    private String parent;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getParent() {
        return parent;
    }

    public void setParent(String parent) {
        this.parent = parent;
    }
}

我想过滤年龄为20岁的学生数组列表并将其存储到另一个数组列表中。

注意:

我试过for循环。它的工作正常。但是我想知道除了循环数组列表之外还有什么最快的方法来过滤学生年龄。

我在iOS上有一些经验。在iOS中,NSPredicate用于过滤NSArray的学生年龄。我从上个月开始学习android。除了通过互联网循环数组列表以实现相同的目标之外,我没有得到任何答案。

2 个答案:

答案 0 :(得分:2)

您可以使用retrolambda库来获得Java 8 stream类似的功能:

List<Student> filteredList = StreamSupport
            .stream(yourInputStudentList)
            .filter(item -> item.getAge() == "20")
            .collect(Collectors.toList());

为此,您需要添加更新您的gradle文件,如下所示:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.4.0'
        classpath 'me.tatarka:gradle-retrolambda:3.2.0' // Add this         
    }
}

答案 1 :(得分:1)

您使用Lightweight-Stream-API:

dependencies {
    classpath 'com.android.tools.build:gradle:1.4.0'
    compile 'com.annimon:stream:1.1.2'
}

然后使用:

    import com.annimon.stream.Stream;
    import com.annimon.stream.function.Predicate;
    import com.annimon.stream.Collector;

..............

List<Student> filteredList = Stream.of(yourInputStudentList).filter(new Predicate<String>() {
            @Override
            public boolean test(Student item) {
                return item.getAge().equals("20");
            }
        }).collect(Collectors.toList());

的Lamda:

    import com.annimon.stream.Stream;
    import com.annimon.stream.function.Predicate;

..............

List<Student> filteredList = Stream.of(yourInputStudentList).filter(item-> item.getAge().equals("20")).collect(Collectors.toList());