我正在尝试对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());
}
您需要将cartItems参数声明为列表
public double calculateCartTotal(List<CartItem> cartItems) {
this.totalPrice = cartItems.stream()
.mapToDouble(CartItem::getTotalItemPrice)
.sum();
return totalPrice;
}
您的代码有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列。 所以我做了: 或: 我相信地图具有将数据从一种类型转换为另一种类型的功能。在本例中,从对象到字符串,然后在字符串列表中收集它们。 但上面的代码显示了编译时错误:无法从对象转换为字符串列表。 请给我建议正确的做法,并说明我的理解有什么问题。