Java中按多个变量筛选arraylist

Java中按多个变量筛选arraylist,java,arraylist,Java,Arraylist,这是我项目的一部分,我找不到任何方法来实现它 所以我有一个学生班的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
。下面是课堂:

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
hold元素,这些元素与类的某个值匹配。我现在的项目一次只能过滤一个属性

我所做的只是切换所选项目的索引(组合框)并检查列表中的所有元素

但我真正想要的是,用户可以选择许多他们想要过滤列表的变量,我们不知道他们选择了多少


请帮忙

过滤本身并不太具有挑战性。只需创建一个助手方法即可为您执行筛选:

如果允许使用Java 8(您已经学会了):

publicstaticvoidfilter(arraylistlst,谓词acceptStudent){
ArrayList lst2=新的ArrayList();
学生(s:lst){
如果(接受学生测试){
lst2.添加(s);
}
}
返回lst2;
}
没有Java8,它会变得更加冗长,但本质上是一样的

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;
}
公共静态空过滤器(ArrayList lst、boolean testSST、int requiredSST、,
布尔testNhom,int requiredNHom,布尔testTo,
int requiredTo、布尔测试全息图、字符串requiredTo、,
布尔testTen,字符串requiredTen,布尔testLop,
字符串requiredLop、布尔testKhoa、字符串requiredKhoa){
ArrayList lst2=新的ArrayList();
学生(s:lst){
如果(!testSST|s.SST==requiredst)和
(!testNHom | | s.Nhom==要求的Nhom)和
(!testTo | | s.To==requiredTo)和
(!testHoLot | | Objects.equals(s.NHom,requiredHoLot))&&
(!testTen | | Objects.equals(s.Ten,requiredTen))和
(!testLop | | Objects.equals(s.Lop,requiredrop))&&
(!testKhoa | | Objects.equals(s.Khoa,requiredKhoa))){
lst2.添加(s);
}
}
返回lst2;
}

然后只需将gui连接到filter方法,输入可接受的参数,就可以了

acceptStudent.test函数做什么?它将测试所有对象属性?你有关于这个的文档吗?你必须组装一个谓词,它接受一个student对象,如果它有效,则返回true,所以我必须为所有情况创建谓词?用户选择1、2、3、4的示例。。。要筛选的属性?
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;
}