从Java中的Collection <t>中删除指定数量的项目

时间:2015-11-25 04:30:26

标签: java collections

我正在编写一个包含Shop<T>类型变量stock的课程Collection<T>。该类还有从股票买入并卖给股票的方法。基本上,这些方法分别从库存中删除并添加到库存中。库存包含所有相同产品的商品,因此无需订购商品或跟踪商品的位置或放置或取出的位置。我在使用buy方法时遇到问题,其标题定义如下:

void buy(int n, Collection<T> items)

我需要这个方法做的是(1)向items添加一个元素,(2)从stock中删除一个元素,以及(3)重复步骤1和2 {{1时间。我无法弄清楚步骤1。

1 个答案:

答案 0 :(得分:2)

我认为这只能通过迭代器完成。形式的东西:

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Shop<T> {
    private Collection<T> stock = new ArrayList<>();

    public Shop(T[] data) {
        stock.addAll(Arrays.asList(data));
    }

    public void buy(int n, Collection<T> items) {

        final Iterator<T> iter = stock.iterator();
        for (int i = 0; i < n; i++) {
            if (iter.hasNext()) {
                final T item = iter.next();
                items.add(item);
                iter.remove();
                System.out.println("Bought "+item.toString());
            }
            else {
                System.out.println("Out of stock.");
                break;
            }
        }
    }

    public static void main(String args[]) {
        final String data[] = {"a", "b", "c"};
        final Shop<String> s = new Shop<>(data);
        final Collection<String> inventory = new ArrayList<>();
        s.buy(2, inventory);
        System.out.println("Inventory is now: ");
        for (String str : inventory) {
            System.out.println(" "+str);
        }
    }
}

这将吐出:

  

买了

     

买了b

     

现在是库存:

     

     

B'/ P>