Java使用Lambda表达式多字段求和

        Java使用Lambda表达式多字段求和,通过多种应用场景举例,验证求和结果,进一步掌握 Lambda表达式 使用技巧。

目录

01、创建测试类

02、求和验证

03、验证结果


JDK1.8

依赖类

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

以下以电商中的商品举例……

01、创建测试类

GoodsInfoDTO实体类

package com.test.dto;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 商品基础信息DTO类
 *
 * @author 狂龙骄子
 * @since 2022.05.01
 */
public class GoodsInfoDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    private String goodsNo;
    private String goodsType;
    private BigDecimal price;
    private Integer qty;

    public String getGoodsNo() {
        return goodsNo;
    }

    public void setGoodsNo(String goodsNo) {
        this.goodsNo = goodsNo;
    }

    public String getGoodsType() {
        return goodsType;
    }

    public void setGoodsType(String goodsType) {
        this.goodsType = goodsType;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getQty() {
        return qty;
    }

    public void setQty(Integer qty) {
        this.qty = qty;
    }
}

02、求和验证

多种应用场景举例,验证求和结果

package com.test.app;

import java.math.BigDecimal;
import java.util.List;

import com.google.common.collect.Lists;

import com.test.dto.GoodsInfoDTO;

/**
 * 临时测试类
 *
 * @author 狂龙骄子
 * @since 2022.05.01
 */
public class Test20220501 {
    /**
     * 主函数
     */
    public static void main(String[] args) {
        List<GoodsInfoDTO> goodsInfoList = Lists.newArrayList();
        GoodsInfoDTO goodsInfo = new GoodsInfoDTO();
        goodsInfo.setGoodsNo("2022051001");
        goodsInfo.setGoodsType("MATERIAL");
        goodsInfo.setPrice(BigDecimal.valueOf(25.0));
        goodsInfo.setQty(2);
        goodsInfoList.add(goodsInfo);

        goodsInfo = new GoodsInfoDTO();
        goodsInfo.setGoodsNo("2022051002");
        goodsInfo.setGoodsType("MATERIAL");
        goodsInfo.setPrice(BigDecimal.valueOf(30));
        goodsInfo.setQty(2);
        goodsInfoList.add(goodsInfo);

        goodsInfo = new GoodsInfoDTO();
        goodsInfo.setGoodsNo("2022052001");
        goodsInfo.setGoodsType("RECHARGE");
        goodsInfo.setPrice(BigDecimal.valueOf(10.0));
        goodsInfo.setQty(1);
        goodsInfoList.add(goodsInfo);

        // 汇总1:单列累加(65.0)
        System.out.println(goodsInfoList.stream().map(GoodsInfoDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
        // 汇总2:先过滤再单列累加(55.0)
        System.out.println(goodsInfoList.stream().filter(goods -> "MATERIAL".equals(goods.getGoodsType())).map(GoodsInfoDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
        // 汇总3:双列乘积并累加(120.0)
        System.out.println(goodsInfoList.stream().map(x -> x.getPrice().multiply(BigDecimal.valueOf(x.getQty()))).reduce(BigDecimal.ZERO, BigDecimal::add));
        // 积汇4:双列乘积并累加(120.0)
        System.out.println(goodsInfoList.stream().reduce(BigDecimal.ZERO, (x, y) -> {
            return x.add(y.getPrice().multiply(BigDecimal.valueOf(y.getQty())));
        }, BigDecimal::add));
    }
}

03、验证结果

通过练习,可以进一步掌握 Lambda表达式 使用技巧。

其中多字段求和的 汇总3 比 汇总4 更简洁、易理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂龙骄子

独码乐,不如众码乐,乐享其中

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值