gpt4 book ai didi

java - 删除方法从第一个列表中删除项目,但不从其余列表中删除项目

转载 作者:行者123 更新时间:2023-12-02 04:16:04 24 4
gpt4 key购买 nike

我的删除方法中有这个问题,我不太明白。

执行此方法时,它会迭代第一个映射 (titleMap) 并从该映射中删除图书项目的标题,但不会进一步执行其他两个迭代器。

图书项目有标题、卖家和价格。每个属性都有一个映射:titleMap、sellerMap、priceMap。我希望能够删除完整的图书项目,因此从 titleMap 中删除书名,从 sellerMap 中删除卖家,从 PriceMap 中删除价格。

我尝试将三个迭代器合并在一起,但没有成功。如果有人能帮助我找到原因,那就太好了。谢谢。

输入:

ListMultiIndex list = new ListMultiIndex();
list.add("ONE", "Chris", 2);
list.add("TWO", "Bob", 35);
list.add("THREE","David", 100);
list.displaySizeOfList();

try {
list.remove(new BookItem ("THREE","David", 100));
list.remove(new BookItem ("TWO", "Bob", 35));
} catch (BookStoreException e){
e.printStackTrace();
}
list.displaySizeOfList();

输出:

titleMap的大小为:3
sellerMap的大小为:3
PriceMap的大小为:3
书已删除(通过 titleMap),书名名称:三
书已删除(通过 titleMap),书名名称:两
titleMap的大小为:1
sellerMap的大小为:3
PriceMap的大小为:3

没有错误的输出应如下所示:

titleMap的大小为:1
sellerMap 的大小为:1
PriceMao 的大小为:1

方法:

@Override
public void remove(IBookItem book) throws BookStoreException{

boolean isRemoved = false;

for(BookEntry<String,ArrayList<BookItem>> entry : titleMap){
if(entry.getKey().equals(book.getTitle())){
if(entry.getValue().contains(book)) {
entry.getValue().remove(book);
System.out.println("book Removed (via titleMap)with title name: " + book.getTitle());
if(entry.getValue().isEmpty()) {
isRemoved = true;
System.out.println("book removed (titlemap)");
titleMap.remove(entry);
}
}
}
}
isRemoved = false;
for(BookEntry<String,ArrayList<BookItem>> entry2 : sellerMap){
if(entry2.getKey().equals(book.getSeller())){
if(entry2.getValue().contains(book)) {
entry2.getValue().remove(book);
System.out.println("entry.getValue,getremove");
System.out.println("book Removed (via titleMap)with title name: " + book.getSeller());
if(entry2.getValue().isEmpty()) {
isRemoved = true;
System.out.println("book removed (titlemap)");
sellerMap.remove(entry2);
}
}
}
}

isRemoved = false;
for(BookEntry<Integer,ArrayList<BookItem>> entry3 : priceMap){
if(entry3.getKey().equals(book.getSeller())){
if(entry3.getValue().contains(book)) {
entry3.getValue().remove(book);
System.out.println("entry.getValue,getremove");
System.out.println("book Removed (via titleMap)with title name: " + book.getSeller());
if(entry3.getValue().isEmpty()) {
isRemoved = true;
System.out.println("book removed (titlemap)");
sellerMap.remove(entry3);
}
}
}
}
}

最佳答案

我回答了您的其他问题,但我没有意识到您希望每个循环都运行。不使用 return,只需使用 break。如果循环中可能有多个项目匹配,请不要中断,让循环自然完成。我仍然建议您返回已删除的对象,以此来判断该方法是否有效。抛出异常确实不是正确的方法。

我认为您的问题还在于您正在迭代迭代器并从支持集合中删除内容。而不是这个:

titleMap.remove(t);

您应该使用:

it.remove(t);

从集合中删除项目白色迭代是不行的。

我要做的另一件事是更改迭代器循环。使用 while 循环的可读性要高得多。示例:

Iterator<BookEntry<String, ArrayList<BookItem>>> it = titleMap.iterator()
while (it.hasNext())
{
/*if book doesn't exist*/
it.remove();
}

关于java - 删除方法从第一个列表中删除项目,但不从其余列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com