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

使用reduce方法在流中添加BigDecimal

竺和洽
2023-03-14

目标:练习“.reduce”方法

有3类:x类枚举(A,B,C,D),x类产品(字符串名称,BigDecimal价格,BigDecimal折扣,Category Category)x类订单-产品数量

问题:类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);

共有1个答案

邹玄裳
2023-03-14

映射到大的十进制流,然后缩小

BigDecimal op = orderPositions
                .stream()
                .filter(orderPosition -> Category.A.equals(orderPosition.getProduct().getCategory()))
.map(orderPosition1 -> orderPosition1.getProduct().getPrice())
.reduce(BigDecimal.ZERO, BigDecimal::add);

链接:https://mkyong.com/java8/java-8-how-to-sum-bigdecimal-using-stream/stream为空时,第一个值(bigdecimal.zero)是默认值

注意,为了避免nullPointerException我还将枚举的顺序改为相等

 类似资料:
  • 我需要计算所有点的菜的总价,但我没有写减价法。这是一个方法签名(参数有一个Dish的映射,以及它被订购了多少次)。 所以它一定是每道菜的总和。getPrice*DishQuantity 有人问我的失败代码

  • 本文向大家介绍es6中reduce的基本使用方法,包括了es6中reduce的基本使用方法的使用技巧和注意事项,需要的朋友参考一下 前言 为啥要把es6 中 reduce 单独拿出来说呢,因为这个功能实在太骚,值得如此。 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 方法接受四个参数:初始值(或者上一次回调函数的返回值),当前

  • 本文向大家介绍JavaScript中reduce()方法的使用详解,包括了JavaScript中reduce()方法的使用详解的使用技巧和注意事项,需要的朋友参考一下  JavaScript 数组reduce()方法同时应用一个函数针对数组的两个值(从左到右),以减至一个值。 语法 下面是参数的详细信息:     callback : 函数执行在数组中每个值     initialValue :

  • 问题是使用reduce()对数组数组进行操作,并返回一个没有子数组的同构数组。例如-[1,2,[3,[4,5]]]将返回[1,2,3,4,5]。 下面是工作的代码,考虑到子数组本身不是另一个数组的数组- 请注意,我更改了arr数组,因为代码不适用于第一个arr数组,即[1,2,a,b,C]。对于arr[1,2,3,4,C],返回的对象是[1,2,3,4,9,10] 它将我的函数oneArray解释

  • 我试图理解方法是如何精确地处理并行流的,我不理解为什么下面的代码不返回这些字符串的串联。 代码如下: 该代码仅适用于顺序流,但对于并行流,它不会返回串联。每次输出都不同。有人能解释一下那里发生了什么事吗?

  • 抱歉,如果这不是正确的提问方式。我没有“声誉50”来评论对同一个问题的回答,礼节上说我不应该用一个问题来“回答”。 我有相同的问题,如使用添加数据到折线图chart.js但解决方案不适合我。我正在运行一个较新版本的Chart.js(1.0.1-beta.4),我已经尝试了旧版本1.0.1-beta.3建议。除了addData(),一切都为我工作。我已经注释了其他有效的方法。 顺便说一句,我不清楚a