如何修改ArrayList的添加

时间:2014-12-28 21:38:59

标签: java arraylist

我试图修改"添加"方法使得它检查BinItem的SKU是否相同。如果它是唯一的,我会添加它。如果它与其他SKU具有相似的SKU,它将删除BinItem,创建一个新的(相同的SKU),但总结数量。

我尽我所能但却无法理解......这是我的努力。我试着制作一个嵌套的for循环,所以它遍历每个循环,检查它们是否相同并删除它们是否相同。它最终删除了所有内容。

public class Bin
{
   private String myName;
   private ArrayList<BinItem> myContents; 

   public Bin ( String name )  
   {  
      myName = name; 
      myContents = new ArrayList <BinItem>();  
   }

   public ArrayList <BinItem> getContents()  
   {
      return myContents; 
   }

   public String getName() 
   { 
      return myName;  
   }


  // Define the remove and totalQuantity methods and redefine the add method here

   public void remove (int b)
   {
      myContents.remove(b);
   }

   public int totalQuantity()
   {
      int x = 0;
      for (int i = 0; i< myContents.size(); i++)
      {
          x += myContents.get(i).getQuantity();
      }
      return x;
   }

   public void add (BinItem b)
   {
     for (int i = 0; i < myContents.size(); i++)
     {
         for (int x = 0; x < myContents.size(); x++)
         {
             if (!(myContents.get(i).getSKU().equals(myContents.get(x).getSKU())))
             myContents.add(b); 
             else 
             myContents.remove(b);
         }
     } 
   }

   public String toString() 
   {
      String s = "Bin " + myName + ":\n";
      for ( BinItem b : myContents ) 
          s += b + "\n"; 
      return s;
   }
}

这是BinItem类

public class BinItem
{
   private String mySKU; 
   private int myQuantity;

   public BinItem ( String sku, int quantity)   
   {   
       mySKU = sku;   
       myQuantity = quantity;   
   }

   public String getSKU()   
   {    
       return mySKU;  
   }

   public int getQuantity()  
   {  
       return myQuantity;  
   }    

   public String toString()  
   {  
       return "SKU " + getSKU() + ": " + getQuantity();  
   }
}

这里是主要的课程

public static void main( String[] args )
{
    Bin bin = new Bin( "A" );
    bin.add( new BinItem( "1234-0", 500 ) );
    bin.add( new BinItem( "1234-1", 25 ) );
    bin.add( new BinItem( "1234-0", 243 ) );
    bin.add( new BinItem( "1234-2", 7720 ) );
    bin.add( new BinItem( "1234-0", 871 ) );
    System.out.println( bin );
}

我试图让它回归

Bin A:
SKU 1234-1: 25
SKU 1234-2: 7720
SKU 1234-0: 1614

2 个答案:

答案 0 :(得分:1)

如果要做的只是检查列表是否包含具有特定sku的BinItem,则可以覆盖BinItem类中的equals方法。

public override boolean equals(Object obj){
    if(!(obj instanceof Bin)) return false;
    Bin b = (Bin) obj;
    return b.getSKU().equals( getSKU());
}

您需要检查obj是否为Bin对象,否则如果传递的obj不是Bin类型,则会收到错误。 然后在Bin类的add方法中,使用myContents.contains( newObject)
来检查列表是否包含该对象 如果列表已包含bin项,则它将返回true。此时,您可以获取列表中已有项目的数量,然后将新对象的数量添加到其中。如果您要更改的是数量,则无需删除该项目并创建新项目 只需添加一个addQuantity方法并传入一个int;像这样:

public void addQuantity(int num){
    myQuantity += num;
}

要获取列表中的alrady对象,可以使用indexOf(obj)获取它的索引,然后使用get检索对象,然后只需按给定的数量递增数量。
实际上你甚至不需要使用.contains(),因为如果列表中不存在该对象,它将返回-1,你可以这样检查:

int index = myContents.indexOf( b );
if(index == -1){
    //Handle adding the item to the list.
}else {
    BinItem bi = myContents.get(index);
    bi.addQuantity( b.getQuantity() );
}

希望这能帮到你。

答案 1 :(得分:0)

在BinItem类中,您可以覆盖equals()方法

public boolean equals(Object obj) {
    BinItem b = (BinItem) obj ;
    return b.getSKU() == obj.getSKU(); 
}

然后使用public boolean contains(Object o)

检查包含项目的列表
 public void add (BinItem b)
 {

    if (!myContents.contains(b))
      myContents.add(b);
    else { //Edit : Based on Anthony Forloney's comment
      // You should handle the quantity sum here based on your logic
      myContents.remove(b);
      myContents.add(b);
    }
 }