Java 具有相似数据的筛选器ArrayList
我有以下课程:Java 具有相似数据的筛选器ArrayList,java,collections,guava,Java,Collections,Guava,我有以下课程: public class School{ List<ClassRoom> classRooms; } public class ClassRoom{ List<Student> students; } public class Student{ String name; long typeId; } 公立学校{ 列出教室名单; } 公共课堂{ 列出学生名单; } 公立班学生{ 字符串名; 长型ID; } 我需要让所有学生都在typeID=123的指
public class School{
List<ClassRoom> classRooms;
}
public class ClassRoom{
List<Student> students;
}
public class Student{
String name;
long typeId;
}
公立学校{
列出教室名单;
}
公共课堂{
列出学生名单;
}
公立班学生{
字符串名;
长型ID;
}
我需要让所有学生都在typeID=123的指定教室内
预期结果:
List filteredStudent=classRoomList.filterByStudentTypeID(typeIdToSearchFor)
我不需要写一些肮脏的代码和循环
我需要利用现有的图书馆。
我发现谷歌番石榴
我在guava找到了一种方法,通过整个参考文献进行搜索。。。相反,我需要使用属性typeId进行搜索
Collection<Student> filtered =Collections2.filter(students, Predicates.equalTo(s1));
Collection filtered=Collections2.filter(学生、谓词、等式(s1));
任何想法 因为您使用的是番石榴,所以可以使用自定义谓词:
final long typeIdToSearchFor = ...;
Collection<Student> filtered = Collections2.filter(students,
new Predicate<Student>() {
@Override
public boolean apply(Student s) {
return s.typeId == typeIdToSearchFor;
}
}
);
final long typeIdToSearchFor=。。。;
集合筛选=集合2.筛选(学生,
新谓词(){
@凌驾
公共布尔应用(学生s){
返回s.typeId==typeIdToSearchFor;
}
}
);
请注意,
typeidtosearch for
在调用filter
的范围内必须是final
,因为它被(匿名)谓词
子类引用。我不需要编写一些脏代码和循环
。。。哇!也许你需要让自己适应不同的学科。您是否考虑过电话卫生问题?编写您自己的谓词
实现,并在调用过滤器
时使用它。感谢Ted Hopp提供的帮助。也就是说,值得与“脏”循环并排查看,并比较哪一个更具可读性。@LouisWasserman-Amen。当然,如果OP发现某种可重用的谓词实现很有用,那么这可能有利于这种方法。不过,对于一次性需求,我会选择循环。