[英]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()
。 現在,在FoodItemOrderDetails
, LaundryItemOrderDetails
, HousekeepingItemOrderDetails
實現該接口。
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.