当前位置: 首页 > 知识库问答 >
问题:

使用流对列表中的对象字段求和

裴和怡
2023-03-14

我正在尝试对List的字段求和并返回值。我想为此使用流,但我对流不熟悉,不确定流是否可以完成此操作。这是我尝试过的,但我认为语法不正确。

    public double calculateCartTotal(ArrayList cartItems) {
        
        this.totalPrice = cartItems.stream()
                .map(item -> item.getTotalItemPrice())
                .reduce(0, (a, b) -> a + b);
        

        return totalPrice;
        
    }

上下文的相关类结构。

public class Cart {

private double totalPrice;
private List<CartItem> cartItems;

public Cart() {
        super();
        this.totalPrice = 0;
        this.cartItems = new ArrayList<CartItem>();
    }
   //other methods
}


public class CartItem {

    private Product productName;
    private int numberOfUnits;
    private double totalItemPrice;
    private double unitPrice;

    public CartItem(Product productName, int numberOfUnits) {
        super();
        this.productName = productName;
        this.numberOfUnits = numberOfUnits;
    }
    //other methods

}

获取总价和单价方法


public double getTotalItemPrice() {
        return this.getUnitPrice() * numberOfUnits;

    }

    public double getUnitPrice() {
        return Double.parseDouble(productName.getCurrentPrice());
    }

共有2个答案

梅玉堂
2023-03-14

您需要将cartItems参数声明为列表

public double calculateCartTotal(List<CartItem> cartItems) {

    this.totalPrice = cartItems.stream()
           .mapToDouble(CartItem::getTotalItemPrice)
           .sum();
    return totalPrice;

}
燕嘉熙
2023-03-14

您的代码有2个问题。

>

不将流转换为DoubleStrem。使用DoubleStream有一个优点,它不会将您的原始双精度转换为Double对象。此外,它与普通的Stream不同,它用于处理数字,因此它带有有用的方法,例如sum,我们不必使用减少

示例代码

public double calculateCartTotal(List<CartItem> cartItems) {
    this.totalPrice = cartItems.stream()
        .mapToDouble(i -> i.getTotalItemPrice())
        .sum();
    return totalPrice;  
}
 类似资料:
  • 我想创建对象MyObject的实例,其中的每个字段都是该字段值的总和 我创建一个对象 然后我构建对象列表: 我想要创建对象() 很容易对每个流求和一个字段: 或 然后构造对象

  • 我有这样的想法: 我怎么能把它写在一个流中呢?收集f.e.

  • 问题内容: 假设有一个Obj类 并且您有一个实例列表,即。 现在,如何在Java8中使用过滤条件从流中找到列表中的对象的int字段值的总和(例如,对于object ,条件为)? 问题答案: 你可以做 或(使用方法参考)

  • 假设我们有: 我们有一个实例列表,即

  • 假设有一个类Obj 并且您有一个实例列表,即。 现在,我如何在Java8中用流找到来自列表中对象的int字段值的和(例如,对于对象,标准是)?

  • 我最近开始处理Java流。我试图从我的一个SQL查询的结果集中获取字符串值。结果集只从数据库中选择一个字符串/Varchar列。 所以我做了: 或: 我相信地图具有将数据从一种类型转换为另一种类型的功能。在本例中,从对象到字符串,然后在字符串列表中收集它们。 但上面的代码显示了编译时错误:无法从对象转换为字符串列表。 请给我建议正确的做法,并说明我的理解有什么问题。