Android 在数组列表或列表中筛选自定义对象

Android 在数组列表或列表中筛选自定义对象,android,list,arraylist,filter,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 = n

我在数组列表中有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。除了通过internet循环数组列表来实现相同的功能之外,我没有得到任何答案。

您可以使用库来获得类似的功能:

List<Student> filteredList = StreamSupport
            .stream(yourInputStudentList)
            .filter(item -> item.getAge() == "20")
            .collect(Collectors.toList());
您可以使用库获取类似的函数:

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

您可以使用轻量级流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());
import com.annimon.stream.stream;
导入com.annimon.stream.function.Predicate;
导入com.annimon.stream.Collector;
..............
List-filteredList=Stream.of(yourInputStudentList).filter(新谓词(){
@凌驾
公共布尔测试(学生项目){
return item.getAge()等于(“20”);
}
}).collect(Collectors.toList());
拉姆达:

    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());
import com.annimon.stream.stream;
导入com.annimon.stream.function.Predicate;
..............
List filteredList=Stream.of(yourInputStudentList).filter(item->item.getAge().equals(“20”).collect(Collectors.toList());

您使用轻量级流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());
import com.annimon.stream.stream;
导入com.annimon.stream.function.Predicate;
导入com.annimon.stream.Collector;
..............
List-filteredList=Stream.of(yourInputStudentList).filter(新谓词(){
@凌驾
公共布尔测试(学生项目){
return item.getAge()等于(“20”);
}
}).collect(Collectors.toList());
拉姆达:

    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());
import com.annimon.stream.stream;
导入com.annimon.stream.function.Predicate;
..............
List filteredList=Stream.of(yourInputStudentList).filter(item->item.getAge().equals(“20”).collect(Collectors.toList());

除循环数组列表外的任何最快方式。。。显然,对于自定义谓词,除了循环数组列表之外,没有任何其他最快的方法可以不迭代所有元素而进行过滤。。。显然,对于自定义谓词,如果不迭代所有元素,就无法进行过滤:age不应该是字符串,而应该是int?尽管是离题。它说“无法解析方法‘流(java.util.List)”。请注意:年龄不应该是字符串,而应该是int?尽管是离题。它说“无法解析方法‘流(java.util.List)”。请参见Hi brother。我收到以下错误:“java.lang.ClassCastException:java.util.stream.Collectors$CollectorImpl无法强制转换为com.annimon.stream.Collector”。当我使用第一个选项时。导入com.annimon.sream.Collector请删除导入java.util.stream.Collector,然后添加导入com.annimon.stream.Collector.Hi brother。我收到以下错误:“java.lang.ClassCastException:java.util.stream.Collectors$CollectorImpl无法强制转换为com.annimon.stream.Collector”。当我使用第一个选项时。导入com.annimon.sream.Collector请删除导入java.util.stream.Collector,然后添加导入com.annimon.stream.Collector。