我有一个包含学生成绩的ArrayList,我想过滤给定成绩字母的学生。例如,如果用户输入A,则表格必须显示所有具有F等级的学生。但问题是它没有过滤它。
static List<Assign2> studentList = new ArrayList<>();
String letter = JOptionPane.showInputDialog(this,"Which grade do you want to filter?");
List<Assign2> remaining = new ArrayList<>(studentList);
for(int i=0;i<remaining.size();i++){
if(remaining.get(i).getLetterGrade()!=letter){
remaining.remove(i);
}
}
table(remaining);
答案 0 :(得分:2)
这样的事情:
[x and y for x, y in zip([True, False, False], [True, True, False])]
答案 1 :(得分:1)
这个答案是基于我在你的问题中理解的。
试试这样。对于每个学生,您需要检查他是否没有输入的成绩信,如果是,您将他添加到列表中。
String letter = JOptionPane.showInputDialog(this,"Which grade do you want to filter?");
for(int i=0;i<studentList.size();i++){
if(!studentList.get(i).getLetterGrade().equalsIgnoreCase(letter)){
sList.add(studentList.get(i));
}
}
答案 2 :(得分:1)
您可以使用以下java8代码段过滤掉所有不等于输入的成绩:
// create copy
List<Assign2> remaining = new ArrayList<>(studentList);
// remove all that do not have the input grade
remaining.removeIf(e -> !e.getLetterGrade().equals(letter));
上面的代码首先创建原始列表的副本。然后使用该副本删除所有没有用户输入成绩的学生。
注意:原始列表仍然相同。所以它仍然包含所有学生
答案 3 :(得分:1)
你可以做一些预先计算。就像你可以将所有成绩相同的学生分组并将它们放在hashmap中。当您获得查询时,只需从地图中获取学生列表。
另一个没有使用
的选项studentList.get(ⅰ).getLetterGrade()。包含( “A”)
使用
studentList.get(ⅰ).getLetterGrade()。equalsIgnoreCase( “A”)