如何在方法中使用ArrayList作为参数从类的ArrayList中删除元素?

时间:2019-04-30 04:01:47

标签: java arrays arraylist collections

我和我的朋友正在为进行示例编程考试进行编程考试,但是在将数组列表作为从同一类的数组列表中删除多个项目的方法中使用参数时遇到了麻烦。

我们尝试在网上搜索并使用我们的BlueJ教科书找到解决方案。

我们工作分配表上的说明说:“编写一个方法removeItemFromOrder和一个字符串数组itemArray参数,以从订单中删除多个食品。”

import java.util.ArrayList;
/**
 * Write a description of class Order here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Order
{
    // instance variables - replace the example below with your own
    private ArrayList<OrderedItem> order;

    /**
     * Constructor for objects of class Order
     */
    public Order()
    {
        order = new ArrayList<>();
    }

    /**
     * Returns the order collection to the user.
     * @return the order collection.
     */
    public ArrayList getOrder()
    {
        return order;
    }

    /**
     * Add an item to the order.
     * @param OrderedItem the item to be added
     */
    public void addOrderItem(OrderedItem foodItem)
    {
        order.add(foodItem);
    }

    public void removeOrderItem(ArrayList<String> itemArray)
    {
        //**We don't know what to put here!**
    }
}

4 个答案:

答案 0 :(得分:1)

如果需要删除多个项目,可以将它们添加到临时列表中,也可以使用removeAll

// creating ArrayList 
java.util.List<String> list = new ArrayList<>();  
list.add("apple");
list.add("banana");
list.add("mango");
list.add("barry");

java.util.List<String> needToRemove = new ArrayList<>();
needToRemove.add("apple");
needToRemove.add("banana");

// removeAll will remove multiple elements,
// We can pass any collection like Set, List or any other
list.removeAll(needToRemove);        

System.out.println("After Removed From List:");
list.forEach(System.out::println);

答案 1 :(得分:0)

Arraylist.clear();方法可用于清除数组列表 Arraylist.removeAll();方法删除数组列表中的所有元素。 两种方法都清除列表的元素。由于必须执行的行数较少,clear()方法具有更好的性能。 该链接https://howtodoinjava.com/java/collections/arraylist/empty-clear-arraylist/提供了这两种方法的源代码

答案 2 :(得分:0)

非常好的朋友,只要您拥有对象的密钥(即安全的),就可以尝试使用方法.remove()

答案 3 :(得分:0)

正如我所看到的,您传递给removeOrderItem方法的数组列表是一个字符串列表,而您在类中的数组列表是OrderItem的列表。因此,首先您必须找到这两个列表之间的共同点。

我们假设OrderItem的模型具有一个包含每个订单名称(orderItem.getName())的字段。 itemArray方法中的removeOrderItem是一个列表,其中包含要删除的某些订单的名称。

好的,在这种情况下,我们可以这样做:

public void removeOrderItem(ArrayList<String> itemArray) {
    List<OrderedItem> tempList = new ArrayList<>();

    for (OrderedItem food: this.order) {
        for (String foodName: itemArray) {
           if (food.getName().equals(foodName))
               tempList.add(food);
               break;
        }
    }

    this.order.removeAll(tempList);
}