簡體   English   中英

如何遍歷泛型列表

[英]How to iterate over generic list

我有一個類,其中列出了一個泛型類型。 現在,我嘗試遍歷該列表以獲取該類的值。 getOrderAmount()方法中,我嘗試進行迭代。

@Document(collection = Cart.FIELDS.COLLECTION)
public class Cart extends BaseOrderEntity {

    public interface FIELDS extends BaseOrderEntity.FIELDS {
        String COLLECTION = "cart";
        String LIST_ORDERS = "orderList";
        String CART_TYPE = "cartType";
    }

    @Field(value = FIELDS.LIST_ORDERS)
    private List<T> orderList;
    @Field(value = FIELDS.CART_TYPE)
    private Integer cartType;

    public List<T> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<T> orderList) {
        this.orderList = orderList;
    }

    public Integer getCartType() {
        return cartType;
    }

    public void setCartType(Integer cartType) {
        this.cartType = cartType;
    }

    @Override
    public RefCollectionType getRefCollectionType() {
        if (T.class.getClass() == FoodItemOrderDetails.class.getClass()) {
            return RefCollectionType.FOOD;
        } else if (T.class.getClass() == LaundryItemOrderDetails.class.getClass()) {
            return RefCollectionType.LAUNDRY;

        } else if (T.class.getClass() == HousekeepingItemOrderDetails.class.getClass()) {
            return RefCollectionType.HOUSEKEEPING;

        }
        return RefCollectionType.FOOD;
    }

    @Override
    public double getOrderAmount() {
        double totalfoodOrderAmount = 0.0;
        for (FoodItemOrderDetails foodItem : orderList) {
            totalfoodOrderAmount = totalfoodOrderAmount + (foodItem.getPrice() * foodItem.getQuantity());
        }
        return totalfoodOrderAmount;
    }
}

通用類在這里。

FoodItemOrderDetails
LaundryItemOrderDetails
HousekeepingItemOrderDetails

您應該有一個類似於OrderDetails的接口,該接口應該具有2個方法getQuantity()getPrice() 現在,在FoodItemOrderDetailsLaundryItemOrderDetailsHousekeepingItemOrderDetails實現該接口。

    for (OrderDetails item : orderList) {
        totalAmount = totalAmount + (item .getPrice() * item.getQuantity());
    }

您的界面應如下所示。

interface OrderDetails {
    Double getPrice();

    Integer getQuantity();
}

您的課程如下所示。

class FoodItemOrderDetails implements OrderDetails {
    @Override
    public Double getPrice() {
        // return the price for FoodItem
        return null;
    }

    @Override
    public Integer getQuantity() {
        // return the Quantity for FoodItem
        return null;
    }
}

您可以使用Java-8流。

List<OrderDetails> details = new ArrayList<>();
double total = details.stream().mapToDouble(e -> e.getPrice() * e.getQuantity()).sum();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM