从Java中的arrayList过滤字符串

时间:2017-11-21 17:21:18

标签: java arraylist filtering

我有一个包含学生成绩的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);

4 个答案:

答案 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”)