过滤具有类似数据的ArrayList

时间:2013-04-21 15:45:19

标签: java collections guava

我有以下课程:

public class School{
List<ClassRoom> classRooms;
}

public class ClassRoom{
List<Student> students;
}

public class Student{
String name;
long typeId;
}

我需要让所有学生都在具有typeID = 123

的给定课堂中

预期结果:

列出filteredStudent = classRoomList.filterByStudentTypeID(typeIdToSearchFor)

我不需要编写一些脏代码和循环。

我需要利用现有的库。 我发现了谷歌番石榴。

我在guava上找到了一个按整个引用搜索的方法...而不是我需要使用属性,typeId

进行搜索
Collection<Student> filtered =Collections2.filter(students, Predicates.equalTo(s1));

任何想法!

1 个答案:

答案 0 :(得分:2)

由于您使用的是Guava,因此可以使用自定义谓词:

final long typeIdToSearchFor = ...;
Collection<Student> filtered = Collections2.filter(students,
    new Predicate<Student>() {
        @Override
        public boolean apply(Student s) {
            return s.typeId == typeIdToSearchFor;
        }
    }
);

请注意typeIdToSearchForfinal调用范围内必须为filter,因为(匿名)Predicate子类正在引用它。