【问题标题】:How to search and remove an object from an arraylist?如何从数组列表中搜索和删除对象?
【发布时间】:2020-02-11 20:33:14
【问题描述】:

这是我之前帖子的后续问题:

How to separate different values in 2-d array

我现在需要根据条件(例如姓名和年龄)从数组中删除特定对象,然后将结果保存到文件中。我已经阅读了一些使用迭代器的示例,但没有很好地遵循。

txt文件中的原始数据:

G Steve 23 Biology 
U Julia 19 Music Flute Sophomore 
G David 25 Math

下面是我在从txt文件中读取数据时创建arraylist的方法

ArrayList<Student> studentList = new ArrayList<>();
Student s = new Undergraduate(type,name,age,major,year);
studentList.add(s);
Student s = new Graduate(type,name,age, major);
studentList.add(s);

for (Student d:studentList) {
    System.out.println(d.toString());
}

提前致谢!

【问题讨论】:

  • 问题是什么,你说的这个多维数组在哪里?
  • 对不起,我的标题可能不合适。它只是像txt文件一样的数组。我已经编辑了标题,希望它有意义。
  • 你知道ArrayList 有一个remove 方法吗?

标签: java arraylist multidimensional-array


【解决方案1】:

我尝试了几种方法终于得到了这个:

                                System.out.println("Enter Student name: ");
                                System.out.println("Enter StudentID: ");
                                String dname = sc.next();
                                int dage = sc.nextInt();



                                for (Student s:studentList){
                                    if (s.getName().equals(dname)&&s.getAge()>dage) {
                                        System.out.println();
                                        studentList.remove(s);
                                        System.out.println("You removed: "+s.getName());
                                        System.out.println();
                                        break;
                                    } else {
                                        System.out.println();
                                        System.out.println("This Student doesn't exist");
                                        System.out.println();
                                        break;
                                    }
                                }

它运行但总是说“学生不存在”。是不是“getName”不起作用(我假设它从 Student 类的构造函数中调用了“name”字符串?)有人可以帮忙吗?

【讨论】:

    【解决方案2】:

    要从列表中删除一个对象,您可以使用 removeIf 和一个条件,下面的示例删除任何年龄超过 22 岁的“G”类型的学生

    studentList.removeIf(s -> s.age > 22 && s.type.equals("G"));
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 Java 8,则可以利用 Streaming。 例如,您的代码可能如下所示:

      List<Student> myFilteredList = studentList.stream()
        .filter(student -> !student.getName().equals("Julia"))
        .filter(student -> student.getAge() > 23)
        .collect(Collectors.toList())
      

      如果您不习惯 lambda 表达式,我认为了解该主题是个好主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多