java List的stream().collect()方法实战

文章目录

这几天在做银联的银行卡对账时,一开始只使用参考号来确定一笔交易,但是这样是不严谨的,项目经理要求使用商户号、终端号、流水号、批次号、参考号五个数据项来确定唯一性,所以本次list转map是在此背景下产生的。

订单类

java 复制代码
public class Order {
    /**商户号**/
    private String shh;
    /**终端号**/
    private String zdh;
    /**流水号**/
    private String lsh;
    /**批次号**/
    private String pch;
    /**参考号**/
    private String ckh;
    /**订单金额**/
    private BigDecimal amount;

    public Order(String shh, String zdh, String lsh, String pch, String ckh, BigDecimal amount) {
        this.shh = shh;
        this.zdh = zdh;
        this.lsh = lsh;
        this.pch = pch;
        this.ckh = ckh;
        this.amount = amount;
    }

    public String getShh() {
        return shh;
    }

    public void setShh(String shh) {
        this.shh = shh;
    }

    public String getZdh() {
        return zdh;
    }

    public void setZdh(String zdh) {
        this.zdh = zdh;
    }

    public String getLsh() {
        return lsh;
    }

    public void setLsh(String lsh) {
        this.lsh = lsh;
    }

    public String getPch() {
        return pch;
    }

    public void setPch(String pch) {
        this.pch = pch;
    }

    public String getCkh() {
        return ckh;
    }

    public void setCkh(String ckh) {
        this.ckh = ckh;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    /**
     * 商户号+终端号+流水号+批次号+参考号
     * @return
     */
    public String getMapKey(){
        return getShh()+getZdh()+getLsh()+getPch()+getCkh();
    }
}

重点是定义一个getMapKey()方法,此方法用来生成key

测试类

java 复制代码
public class OrderMapTest {
    public static void main(String[] args) {
        Order a = new Order("s1","z1","01","0001","202307210923",new BigDecimal("0.01"));
        Order b = new Order("s2","z2","01","0001","202307210924",new BigDecimal("0.02"));
        Order c = new Order("s3","z3","01","0001","202307210925",new BigDecimal("0.03"));
        Order d = new Order("s4","z4","01","0001","202307210926",new BigDecimal("0.04"));
        Order e = new Order("s5","z5","01","0001","202307210927",new BigDecimal("0.05"));

        List<Order> orders = new ArrayList<Order>();
        orders.add(a);
        orders.add(b);
        orders.add(c);
        orders.add(d);
        orders.add(e);

		// list转换成map,使用getMapKey自定义的方法生成key,Order对象做value
        Map<String, Order> map = orders.stream().collect(Collectors.toMap(Order::getMapKey, order -> order));

        Set<String> keys = map.keySet();

        System.out.println("keys====" + keys);

        for (String key : keys) {

            System.out.println(key + ": " + map.get(key).getAmount());

        }
    }
}

测试结果

相关推荐
2202_7544215410 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介13 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习13 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose15 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热17 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余18 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp19 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang21 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
一直学习永不止步27 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
hummhumm41 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j