Java 如何对属性进行求和';从一堆对象中删除对象?

Java 如何对属性进行求和';从一堆对象中删除对象?,java,object,stack,Java,Object,Stack,我有一辆高级轿车,它的构造师是 public car (String name, int numberOfCars, int price) {} 然后,在我的main中,我将堆栈创建为: Stack<car>carStack = new Stack<car>(); carStack.push("Honda", 200, 19000)); carStack.push("Toyota", 300, 18000)); carStack.push("BMW", 150, 400

我有一辆高级轿车,它的构造师是

public car (String name, int numberOfCars, int price) {}
然后,在我的main中,我将堆栈创建为:

Stack<car>carStack = new Stack<car>();
carStack.push("Honda", 200, 19000));
carStack.push("Toyota", 300, 18000));
carStack.push("BMW", 150, 40000));
StackcarStack=新堆栈();
推(本田,20019000);
推(“丰田”,30018000));
推(宝马,15040000);
如何从这个堆栈中获得500辆汽车(150辆宝马+300辆丰田+50辆本田)的价格?

步骤:

  • 使用for循环遍历堆栈。堆栈实现了Iterable接口,因此for-each循环可能是最容易使用的:
    for(Car-myCar:carStack){…}
  • 对循环中的项目调用getPrice()
  • 将其添加到循环之前已声明的sum变量中
  • Q.E.D
另外,为了使代码符合Java命名标准,您的car类应该重命名为car。类和接口名称应以大写字母开头

因为有人在炫耀代码,下面是我的代码片段:

double price = 0.0;
for (Car myCar: carStack) {
  price += myCar.getPrice();
}

您可以在foreach循环中迭代堆栈:

double price = 0.0;

for(Car c : stack)
{
    price += c.getPrice();
}
或者,您可以在while循环中迭代堆栈:

double price = 0.0;

for(Car c : stack)
{
    price += c.getPrice();
}
Iterator iter=carStack.Iterator();
双倍价格=0.0;
while(iter.hasNext()){
price+=iter.next().getPrice();
}
然后汽车的总重量:

public double getTotal() {
    return price * quantity;
}
或者,如果您想保留堆栈,请执行其他人提到的foreach。

如果您正在使用,可以使用具有方法
sumOfInt()

当Java8发布时,我们可以用lambda或方法引用替换匿名内部类。下面是使用方法引用时代码的外观

long price = carBag.sumOfInt(Car::getPrice);
如果price是double而不是int,我们只需要将
sumOfInt()
替换为
sumOfDouble()


注意:我是Eclipse集合的提交者。

在foor循环中迭代堆栈并求和!按照惯例,类名应该大写:
Car
而不是
Car
。当我这样做时,我得到了(150宝马+300丰田+200本田)的价格。有可能得到(150宝马+300丰田+50本田)的价格吗?@Gantavya:????您将获得添加到堆栈中的任何内容的价格,不多也不少。谢谢你的解释
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);
long price = carBag.sumOfInt(Car::getPrice);
long price = carBag.sumOfDouble(Car::getPrice);