gpt4 book ai didi

java - 如何修改ArrayList的add

转载 作者:行者123 更新时间:2023-12-01 12:04:55 25 4
gpt4 key购买 nike

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

希望这对您有所帮助。

关于java - 如何修改ArrayList的add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com