使用 reduce 方法在 Stream 中添加 BigDecimal
Adding BigDecimal in Stream using reduce method
任务:统计 List orderPositions 中类别为 A 的产品价格总和。
目标:练习“.reduce”方法
有 3 个 class:
x 类别枚举(A、B、C、D),
x Product (String name, BigDecimal price, BigDecimal discount, Category 类别)
x OrderPositin - 产品数量
问题:class App1 流操作
下面的代码
public class Product {
private String name;
private BigDecimal price;
private BigDecimal discount;
private Category category;
public Product(String name, BigDecimal price, BigDecimal discount, Category category) {
this.name = name;
this.price = price;
this.discount = discount;
this.category = category;
}
public class OrderPosition {
private Product product;
private int quantity;
public OrderPosition() {
}
public OrderPosition(Product product, int quantity) {
this.product = product;
this.quantity = quantity;
}
public enum Category {
A, B, C, D
}
public class App1 {
public static void main(String[] args) {
List<OrderPosition> orderPositions = List.of(
new OrderPosition(new Product("Szynka", new BigDecimal("25"),BigDecimal.ZERO, Category.A), 10),
new OrderPosition(new Product("Ser", new BigDecimal("25.5"),BigDecimal.ZERO, Category.B), 20),
new OrderPosition(new Product("Chleb", new BigDecimal("15.5"),BigDecimal.ZERO, Category.C), 10),
new OrderPosition(new Product("Nabial", new BigDecimal("8"),BigDecimal.ZERO, Category.D), 2),
new OrderPosition(new Product("Kielbasa", new BigDecimal("15"),BigDecimal.ZERO, Category.A), 10),
new OrderPosition(new Product("Jajko", new BigDecimal("5"),BigDecimal.ZERO, Category.B), 5)
);
Optional<BigDecimal> op = orderPositions
.stream()
.filter(orderPosition -> orderPosition.getProduct().getCategory().equals(Category.A))
.reduce((x,y) -> x.add.y);
提前致谢!!
映射到大十进制流然后减少
BigDecimal op = orderPositions
.stream()
.filter(orderPosition -> Category.A.equals(orderPosition.getProduct().getCategory()))
.map(orderPosition1 -> orderPosition1.getProduct().getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add);
Link:
https://mkyong.com/java8/java-8-how-to-sum-bigdecimal-using-stream/
第一个值(BigDecimal.ZERO)是流为空时的默认值
请注意,我也更改为 Enum 的等序,以避免 nullPointerException
任务:统计 List orderPositions 中类别为 A 的产品价格总和。
目标:练习“.reduce”方法
有 3 个 class: x 类别枚举(A、B、C、D), x Product (String name, BigDecimal price, BigDecimal discount, Category 类别) x OrderPositin - 产品数量
问题:class App1 流操作
下面的代码
public class Product {
private String name;
private BigDecimal price;
private BigDecimal discount;
private Category category;
public Product(String name, BigDecimal price, BigDecimal discount, Category category) {
this.name = name;
this.price = price;
this.discount = discount;
this.category = category;
}
public class OrderPosition {
private Product product;
private int quantity;
public OrderPosition() {
}
public OrderPosition(Product product, int quantity) {
this.product = product;
this.quantity = quantity;
}
public enum Category {
A, B, C, D
}
public class App1 {
public static void main(String[] args) {
List<OrderPosition> orderPositions = List.of(
new OrderPosition(new Product("Szynka", new BigDecimal("25"),BigDecimal.ZERO, Category.A), 10),
new OrderPosition(new Product("Ser", new BigDecimal("25.5"),BigDecimal.ZERO, Category.B), 20),
new OrderPosition(new Product("Chleb", new BigDecimal("15.5"),BigDecimal.ZERO, Category.C), 10),
new OrderPosition(new Product("Nabial", new BigDecimal("8"),BigDecimal.ZERO, Category.D), 2),
new OrderPosition(new Product("Kielbasa", new BigDecimal("15"),BigDecimal.ZERO, Category.A), 10),
new OrderPosition(new Product("Jajko", new BigDecimal("5"),BigDecimal.ZERO, Category.B), 5)
);
Optional<BigDecimal> op = orderPositions
.stream()
.filter(orderPosition -> orderPosition.getProduct().getCategory().equals(Category.A))
.reduce((x,y) -> x.add.y);
提前致谢!!
映射到大十进制流然后减少
BigDecimal op = orderPositions
.stream()
.filter(orderPosition -> Category.A.equals(orderPosition.getProduct().getCategory()))
.map(orderPosition1 -> orderPosition1.getProduct().getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add);
Link: https://mkyong.com/java8/java-8-how-to-sum-bigdecimal-using-stream/ 第一个值(BigDecimal.ZERO)是流为空时的默认值
请注意,我也更改为 Enum 的等序,以避免 nullPointerException