这是我项目的一部分,我找不到任何实现方法。
所以我有一个ArrayList
学生班。这是班级:
public abstract class Student {
protected int STT;
protected int Nhom;
protected int To;
protected String HoLot;
protected String Ten;
protected String Lop;
protected String Khoa;
}
我想过滤该列表并返回与该类的某个值匹配的另一个ArrayList
保持元素。我的项目现在只能一次过滤一个属性。
我所做的只是切换所选项目的索引(组合框)并检查列表中的所有元素。
但我真正想要的是用户可以选择他们想要过滤列表的许多变量,我们不知道他们选择了多少。
请帮忙!
答案 0 :(得分:0)
过滤本身并不太具有挑战性。只需创建一个帮助方法来为您进行过滤:
如果允许Java 8(并且你已经学会了它):
public static void filter(ArrayList<Student> lst, Predicate<Student> acceptStudent) {
ArrayList<Student> lst2 = new ArrayList<>();
for(Student s : lst) {
if (acceptStudent.test(s)) {
lst2.add(s);
}
}
return lst2;
}
如果没有Java 8,它会变得更加冗长,但基本上是相同的
public static void filter(ArrayList<Student> lst, boolean testSST, int requiredSST,
boolean testNhom, int requiredNHom, boolean testTo,
int requiredTo, boolean testHoLot, String requiredHoLot,
boolean testTen, String requiredTen, boolean testLop,
String requiredLop, boolean testKhoa, String requiredKhoa) {
ArrayList<Student> lst2 = new ArrayList<>();
for(Student s : lst) {
if ((!testSST || s.SST == requiredSST) &&
(!testNHom || s.Nhom == requiredNHom) &&
(!testTo || s.To == requiredTo) &&
(!testHoLot || Objects.equals(s.NHom, requiredHoLot)) &&
(!testTen || Objects.equals(s.Ten, requiredTen)) &&
(!testLop || Objects.equals(s.Lop, requiredLop)) &&
(!testKhoa || Objects.equals(s.Khoa, requiredKhoa))) {
lst2.add(s);
}
}
return lst2;
}
然后简单地将gui挂钩到过滤器方法,输入可接受的参数,然后离开你!