java - 无法从数组列表中删除元素

标签 java arrays arraylist

<分区>

一些背景:我是 Java 的新手,正在学习基础的 Java 类(class)。我目前正在进行该类(class)的期末项目,并完成了除最后一段代码之外的所有内容。出于某种原因,我在最艰难的时候从数组列表中删除一个元素。这是我正在处理的代码:

public static void delete(String bookID) {
    for (book eachElement : catalog) {
        if (eachElement.getBookID().equals(bookID)) {
            catalog.remove(eachElement);
            return;
        }
    }
}

代码执行,没有运行时错误,但不会删除任何内容。 此外,我知道在 remove 语句之前一切正常,因为我有另一种方法使用相同的 for 和 if 语句以及 select bookID 字符串来计算计算结果。

最佳答案

在 forEach 循环中,您不应该也不能从集合中移除元素。

请阅读 Java 中 ArrayList 的文档。

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

实际上您可以看到,ArrayList.remove(Object o) 会删除列表中的 o,因此不需要您的方法。

所以答案是,找到带有您 ID 的书对象,然后将其删除。或者更好地使用 Map 来存储您的数据。

在你的情况下是

Book b = null;
for(Book book : books) {
     if(book.getBookId().equals(bookId)) {
         b = book.getBookId();
         break;
     }
}
books.remove(b);

或者如果你喜欢 Java8,那你真的应该喜欢 :D

books.stream().filter(b -> b.getBookId().equals(bookId)).getFirst().ifPresent(books::remove);

关于java - 无法从数组列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556350/

相关文章:

java - Netbeans 未使用 JDK 1.8.0_40 启动 Java DB 服务器

Javascript:按名称查找数组

java - 从列表中删除另一个列表中不存在的所有对象

java - 尝试连接到 FireStore 数据库但收到 "Program type already present: okio.Buffer$2"

java - 这个 'if' 在 Java 中使用三个同时表达式进行评估

java - 在eclipse中更改多个java文件的包声明

java - 获取源代码//文件读取器//返回空列表

c++ - 为什么当我取消引用数组指针时,结果值是指向数组第一个元素的指针,而不是整个数组对象?

java - 使用方法删除重复项

java - 对两个 ArrayList 进行排序,一个相对于另一个