如果您使用的是Eclipse Collections,则可以使用具有方法的MutableStacksumOfInt()
。
Car honda = new Car("Honda", 19000);
Car toyota = new Car("Toyota", 18000);
Car bmw = new Car("BMW", 40000);
MutableStack<Car> carStack =
ArrayStack.newStackFromTopToBottom(honda, toyota, bmw);
long price = carStack.sumOfInt(new IntFunction<Car>()
{
@Override
public int intValueOf(Car eachCar)
{
return eachCar.getPrice();
}
});
Assert.assertEquals(77000, price);
问题提到每辆车都有很多次出现。也许Bag比StackIterable
. ABag
跟踪项目以及该项目在Bag
. 这意味着numberOfCars
从Car
.
MutableBag<Car> carBag = HashBag.newBag();
carBag.addOccurrences(honda, 200);
carBag.addOccurrences(toyota, 300);
carBag.addOccurrences(bmw, 150);
long price = carBag.sumOfInt(new IntFunction<Car>()
{
@Override
public int intValueOf(Car eachCar)
{
return eachCar.getPrice();
}
});
Assert.assertEquals(15200000, price);
当 Java 8 发布时,我们可以将匿名内部类替换为 lambda 或方法引用。这是带有方法引用的代码的样子。
long price = carBag.sumOfInt(Car::getPrice);
如果 price 是 double 而不是 int,我们只需要替换sumOfInt()
为sumOfDouble()
.
long price = carBag.sumOfDouble(Car::getPrice);
注意:我是 Eclipse 集合的提交者。