【问题标题】:How to iterate over generic list如何遍历通用列表
【发布时间】:2018-12-27 03:34:33
【问题描述】:

我有一个类,我采用一个泛型类型列表。现在我正在尝试遍历该列表以获取该类的值。在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

【问题讨论】:

  • 问题是什么?你有什么错误吗?
  • 怎么样for(T item : list) { if(item instanceof FoodItemOrderDetails) //do logic}}
  • 这个问题令人困惑的部分是......那些@DocumentFIELDSRefCollectionType是关于什么的?是否与您的问题有关?
  • 这不正确,不会编译。 T的通用参数定义在哪里。您缺少某事。喜欢class Cart&lt;T&gt; extends ...。否则,必须使用 List>. “键入”列表
  • T 定义在哪里?

标签: java loops java-8 iteration


【解决方案1】:

你应该有一个像OrderDetails 这样的接口,它应该有两个方法getQuantity()getPrice()。现在在FoodItemOrderDetails 中实现该接口, LaundryItemOrderDetailsHousekeepingItemOrderDetails

    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();

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2019-02-14
    • 1970-01-01
    • 2013-01-26
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多