java - 从包含子类和父类(super class)项的数组列表中删除项

标签 java

我有一个数组列表“items”,其中包含来自父类(super class)的项目及其子类的项目。

    for (Item item : items)
    {
        if (item.getLocation() == location)
        {   
            System.out.println(item.getDescription() + " is in this location");
            if (item instanceof Monster)
            {
                Monster monster = (Monster)item; 
                if (monster.hasDied())
                {
                    System.out.println(monster.getDescription() + " has been defeated!");
                    items.remove(monster);     
                }
            }   
        }   
    } 

如果发现怪物已经死了,我会尝试从数组列表中删除该怪物。所有方法都有效,我知道在 foreach 循环中无法从数组列表中删除项目,如上所示。我之前使用下面的代码从数组列表中删除怪物,但是这是当有单独的“项目”和“怪物”数组列表时。它们现在都在同一个“items”数组列表中,因为“Monster”类是“Item”类的子类。

    Iterator<Monster> iter = monsters.iterator();
    while (iter.hasNext()) 
    {
        Monster monster = iter.next();
        if (monster.hasDied())
        {
            if (monster.getLocation() == location)
            {
                System.out.println(monster.getDescription() + " has been defeated!");
                iter.remove();
            }
            else
            {
               iter.remove(); 
            }
        }
    }

我是否可以采用任一方法来从数组列表中删除指定的怪物?

感谢您的帮助!

最佳答案

当然 - 您需要做的就是结合您拥有的两种方法:

  • 按照第二种方法中的方式使用Iterator迭代列表;
  • 按照第一种方法检查当前item是否为Monster。这种组合可以让您找到怪物,并使用迭代器删除它。

以下是您可以执行此操作的方法:

Iterator<Item> iter = items.iterator();
while (iter.hasNext()) 
{
    Item item = iter.next();
    if (item instanceof Monster)
    {
        Monster monster = (Monster)item; 
        if (monster.hasDied())
        {
            if (monster.getLocation() == location)
            {
                System.out.println(monster.getDescription() + " has been defeated!");
                iter.remove();
            }
            else
            {
               iter.remove(); 
            }
        }
    }
}

关于java - 从包含子类和父类(super class)项的数组列表中删除项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466845/

相关文章:

java - 从套接字到套接字的零分配复制

java - 在 Windows LAF 下为每个组件的 JTextField 设置非 Activity 背景颜色

java - 是内存泄漏吗?

Java 垃圾收集器方法

java - TreeSet 到 List 转换中的 Controller 排序

java - “找不到符号”或“无法解析符号”错误是什么意思?

java - 如何缩放 .JPEG 以适应位于 GridView 中的按钮?

java - hibernate 4 - 如何替换 JDBCContext.registerSynchronizationIfPossible()

java - Visualvm 线程启动计数

java - 嵌套循环在 android 中导致大量垃圾收集?