我已经初始化了ArrayList
个产品。 Product
构造函数是:
public Product(String number, String type, double rentalDeposit, double rentalPrice, double lateFee, double buyPrice, int maxDuration)
type
由枚举确定:
protected enum productType {Basket, BabySeat, Helmet, Headlight, Bell};
我使用type
方法传递toString
进行枚举。我需要遍历我所拥有的ArrayList<Product>
(由shop.getInventory()
给出)并计算每个type
的数量,即type
{{1}的数量}},Basket
,BabySeat
等
Helmet
类有一个返回字符串的Product
方法。
getType()
我已尝试使用for (Product.productType product : Product.productType.values()) {
int occurences = Collections.frequency(shop.getInventory(), product.toString());
}
,但它一直返回Collections.frequency
,我不确定原因。
是否有另一种方法可以在不使用大量0
语句的情况下迭代并查找此数量?
答案 0 :(得分:0)
shop.getInventory()
我假设其类型为Collection<Product>
。您可以定义产品,以便.equals(Product)
检查产品内部类型的相等性,甚至更简单地shop.getInventory().stream().filter(item -> product.toString().equals(item.getType())).count()
。 (替换item.getType()
然后从Product中提取类型字段,例如item.type
等。)
答案 1 :(得分:0)
计算列表中与某些条件相对应的项目的简单方法是使用Collectors.groupingBy
和Collectors.counting
。如下所示:
Map<ProductType,Long> counts = products.stream()
.collect(groupingBy(Product::getType, counting()));
如果您不熟悉流,则此声明可以理解为“将列表转换为产品流,按产品类型对产品进行分组,然后计算每个组创建从类型到计数的映射。 “