如何将项目添加到arraylist并修改功能

时间:2013-12-08 04:37:43

标签: java arraylist

我正在尝试使用弹出窗口中的动作侦听器将项添加到我的数组列表中。您可以看到动作监听器here。我现在遇到的问题是我不知道如何将输入添加到我的数组列表中。这个问题的一部分是我需要将项目编号设置为比列表中的最高编号高1。我的数组列表如下命名:

private static ArrayList<InventoryItem> inventory = new ArrayList<>();

,InventoryItem的类看起来像这样:

public class InventoryItem { //Delcare variables below

    DecimalFormat formatted = new DecimalFormat("#,###.00");//set up decimal format for displaying 12.34 type values
    String itemName;
    int itemNumber;

    public String getItemName() {
        return itemName;
    }
    public int getItemNumber(){
        return itemNumber;
    }
    int inStock;
    double unitPrice;
    double value;
    double restockingFee;
    double inventoryValue;

    public InventoryItem(String itemName, int itemNumber, int inStock, double unitPrice) { //declare variables for this class
        this.itemName = itemName;
        this.itemNumber = itemNumber;
        this.inStock = inStock;
        this.unitPrice = unitPrice;
        stockValue(); //call stock value
    }
}

所以我的问题是两部分。第一个是如何让我的itemNumber增加到高于最高值1?我只是做一个泡泡排序来找到最高的?第二部分是如何将所有项目(包括此递增的itemNumber)添加到我原来的arraylist中?

注意的 如果需要,我可以将我的代码全部粘贴到pastebin上,因为它有点大。

编辑:Per @Prabhakaran我添加了一些代码,我几乎就在那里。我几乎得到了这个工作,但是当我开始查看我的列表时,我没有看到添加的功能,所以我怎么能确定我实际上是在添加它?

 String newItemName = String.valueOf(xField);
            String text1 = yField.getText();
            String newInventoryAmount = String.valueOf(text1);
            int newNumber = Integer.parseInt(newInventoryAmount);
            String text2 = zField.getText();
            String newUnitPrice = String.valueOf(text2);
            double newPrice = Double.parseDouble(newUnitPrice);
            for (int i = 0; i >= inventory.size(); i++) {
                inventory.get(inventory.size() ).getItemNumber();
                int newItemNumber;
                newItemNumber = i + 1;
                InventoryItem item = new InventoryItem(newItemName, newItemNumber, newNumber, newPrice);
                inventory.add(item);

我在这里缺少什么?这不应该只是添加一个项目到我的arraylist?我知道它一定很容易,我似乎无法弄明白。

这是我按ItemName排序:

  static ArrayList sortInventory(ArrayList<InventoryItem> unsorted) {
    ArrayList<InventoryItem> sorted = new ArrayList<>(); //create new array list to sort
    InventoryItem alpha = null;
    int lowestIndex = **-1**;
    while (unsorted.size() > 0) { //while my unsorted array is less than 0 do the following
        for (int i = 0; i < unsorted.size(); i++) { //increment through 
            if (alpha == null) {
                alpha = unsorted.get(i); //get the next line in the inventoryItem array
                lowestIndex = i;
            } else if (unsorted.get(i).itemName.compareToIgnoreCase(alpha.itemName) < 0) { //compare items to determine which has a higher value
                alpha = unsorted.get(i);
                lowestIndex = i;
            }

        }
        sorted.add(alpha); //reset the index so it will loop until there are no more items in the unsorted array
        unsorted.remove(lowestIndex);
        alpha = null;
        lowestIndex = **0**;
    }
    return sorted; //return the sorted arraylist

}

编辑:修正了最低指数,它随着黄金而变好。

2 个答案:

答案 0 :(得分:1)

这样做

     private static ArrayList<InventoryItem> inventory = new ArrayList<>();

     String newItemName = String.valueOf(xField);
     String newInventoryNumber = String.valueOf(yField);
     int newNumber = Integer.parseInt(newInventoryNumber);
     String newUnitPrice = String.valueOf(zField);
     double newPrice = Double.parseDouble(newUnitPrice);
     InventoryItem  item  =new InventoryItem(newItemName , newInventoryNumber , newNumber , newUnitPrice ) ;

     inventory.add(item); 

<强>更新

class SimpleComparator implements Comparator<InventoryItem> {
    @Override
    public int compare(InventoryItem o1, InventoryItem o2) {       
            return new Integer(o1.getItemNumber()).compareTo(o2.getItemNumber());
    }
}
//Sorting based on the  itemNumber.
Collections.sort(inventory,new SimpleComparator());

int newItemNumber = inventory.get(inventory.size() - 1).getItemNumber();
newItemNumber ++;

答案 1 :(得分:0)

您可以使用Observer支持创建自己的ArrayList:

    
public class InventoryItemArrayList extends ArrayList {

    private static final long serialVersionUID = 4550719458611714650L;

    private List listeners = new ArrayList();

    public void addInventoryItemAddedListener(InventoryItemAddedListener listener) {
        this.listeners.add(listener);
    }

    @Override
    public boolean add(InventoryItem e) {
        boolean add = super.add(e);
        fireInventoryItemAdded(e);
        return add;
    }

    private void fireInventoryItemAdded(InventoryItem e) {
        for (InventoryItemAddedListener element : listeners) {
            element.inventoryItemAdd(e);
        }
    }

    @Override
    public void add(int index, InventoryItem element) {
        super.add(index, element);
        fireInventoryItemAdded(element);
    }

    @Override
    public boolean addAll(Collection c) {
        boolean addAll = super.addAll(c);
        fireInventoryItemAdded(c);
        return addAll;
    }

    private void fireInventoryItemAdded(Collection c) {
        for (InventoryItem inventoryItem : c) {
            fireInventoryItemAdded(inventoryItem);
        }

    }

    @Override
    public boolean addAll(int index, Collection c) {
        boolean addAll = super.addAll(index, c);
        fireInventoryItemAdded(c);
        return addAll;
    }
}