如何在ArrayList中合并两个相同的项目?

时间:2020-10-27 00:56:46

标签: java arraylist

所以,我有1个超类DessertItem。其中有4个子类:糖果,饼干,冰淇淋,圣代。圣代课扩展了冰淇淋课。超类是抽象类。我也有一个单独的类,它不属于超类,但是在同一包中-Order。还有另一个类-DessertShop,主要位于其中。

Candy,Cookie类实现SameItem <>泛型类。通用接口SameItem <>类如下所示:

@Override
public boolean isSameAs(Candy other) {
    if(this.getName() == other.getName() && this.getPricePerPound() == other.getPricePerPound()) {
        return true;
    }
    else {
    return false;
    }
}

Candy,Cookie类具有此方法:

public Cookie(String n, int q, double p) {
    super(n);
    super.setPackaging("Box");
    cookieQty = q;
    pricePerDozen = p;

    }

    public int getCookieQty() {
        return cookieQty;
    }

    public double getPricePerDozen() {
        return pricePerDozen;
    }
    
    public void setCookieQty(int q) {
    cookieQty = q;
    }
    
    public void setToppingPricePricePerDozen(double p) {
        pricePerDozen = p;
    }
    @Override
    public double calculateCost() {
        double cookieCost = cookieQty * (pricePerDozen/12);
        return cookieCost;
        
    }

类似的东西,但对于cookie类。

所有子类都具有以下方法: 默认构造函数,

import java.util.ArrayList;
import java.util.List;


public class Order extends implements Payable{
    //attributes
    PayType payMethod;
    private ArrayList<DessertItem> OrderArray;


//Constructor
public Order() {
    OrderArray = new ArrayList<>();
    payMethod = PayType.CASH;
}


//methods
public ArrayList<DessertItem> getOrderList(){
    
    return OrderArray;
    
}// end of getOrderList
public ArrayList<DessertItem> Add(DessertItem addDesert){
enter code here

    OrderArray.add(addDesert);
        /* for(DessertItem i : getOrderList()) {

            if(i instanceof Candy) {
                for(DessertItem j : getOrderList()) {
                    if(j instanceof Candy) {
                        if(((Candy) i).isSameAs((Candy) j)) {
 */
//this is what I have tried so far, but I am lost
                    }
                }
            }
        } else if(i instanceof Cookie) {
            for (DessertItem j : getOrderList()) {
                if(((Cookie) i).isSameAs((Cookie)j)) {
                    OrderArray.add(j);
                } else {
                OrderArray.add(i);
            }
        }
    }
    }

    return OrderArray;
}// end of Add


public int itemCount(){
    int counted = OrderArray.size();
    return counted;
}//end of itemCount


public double orderCost() {
    double orderResult = 0;
    for(int i=0; i<OrderArray.size(); i++) {
        orderResult = orderResult + OrderArray.get(i).calculateCost();
    }
    return orderResult;
}
public double orderTax() {
    double taxResult = 0;
    for(int i = 0; i<OrderArray.size(); i++) {
        taxResult = taxResult + OrderArray.get(i).calculateTax();
    }
    return taxResult;
}
public double orderTotal() {
    double ordertotal = orderTax() + orderCost();
    return ordertotal;
}





@Override
public  PayType getType() {
    // TODO Auto-generated method stub
    return payMethod;
}


@Override
public void setPayType(PayType p) {
    payMethod = p;
    
}

public String toString() {
    
    String finalOutput = "";
    finalOutput += "------------------------Receipt--------------------------\n";
    for(int i = 0; i < OrderArray.size(); i++) {
        finalOutput = finalOutput + OrderArray.get(i).toString();
    }
    finalOutput += "--------------------------------------------------\n";

    String line2 = "Total Number of items in order: " + itemCount() + "\n";
    String line3 = String.format("Order Subtotals:\t\t\t\t $%-6.2f", orderCost());
    String line4 = String.format("[Tax: $%.2f]\n", orderTax());
    String line5 = String.format("\nOrder Total:\t\t\t\t\t $%-6.2f\n", orderTotal());
    String outputVar = String.format("%s\n%s%s%17s", line2, line3, line4, line5);
    String ending = "----------------------------------------------------";
    String payType = String.format("\nPaid for with: %s", payMethod.name());
    return finalOutput + outputVar + ending + payType;
}

和toString()方法

因此,我的程序要做的是从用户那里获取输入,询问甜点的名称,询问数量,或根据甜点的数量,询问单价。询问付款方式。然后打印收据。 Order类的外观如下:

{{1}}

所以,我的问题是,如何将类似的物品组合成一个物品?

0 个答案:

没有答案