繁体   English   中英

如何修改ArrayList的添加

[英]How to modify add of ArrayList

我正在尝试修改“添加”方法,以便它检查BinItem的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

如果您只想检查列表中是否包含具有特定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;
}

要获取列表中的常用对象,可以使用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() );
}

希望这对您有所帮助。

在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);
    }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM