【编程技巧】Stream流之toMap多字段组合key

【编程技巧】



前言

在很多时候有需要根据对象的多个key组合唯一进行匹配的场景,那么使用stream如何优雅的实现这一功能呢,废话不多说,直接上代码


一、示例

public class TestClass {

    public static void main(String[] args) {
        List<TestData> list = new ArrayList<>();
        list.add(new TestData("a",true,23));
        list.add(new TestData("a",true,23));
        list.add(new TestData("a",false,25));
        list.add(new TestData("b",true,25));
        list.add(new TestData("b",false,25));

        Map<String, TestData> map = list.stream().collect(Collectors.toMap(d -> d.getName() + "-" + d.getSex(), Function.identity(),(d1,d2) -> d1));

        List<TestDataA> list1 = new ArrayList<>();
        list1.add(new TestDataA("a",true,50.50));
        list1.add(new TestDataA("c",true,50.50));

        for (TestDataA a : list1) {
            TestData data = map.get(a.getName() + "-" + a.getSex());
            if (Objects.nonNull(data)){
                System.out.println(a);
            }
        }

    }
}

@Data
class TestData{
    private String name;
    private Boolean sex;
    private Integer age;

    public TestData(){}

    public TestData(String name, Boolean sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}

@Data
class TestDataA{
    private String name;
    private Boolean sex;
    private Double weight;

    public TestDataA(){}

    public TestDataA(String name, Boolean sex, Double weight) {
        this.name = name;
        this.sex = sex;
        this.weight = weight;
    }
}

示例中使用name和sex作为一个key得到一个新的map,(d1,d2) -> d1参数表示如果出现重复数据取最先拿到的数据,我们根据唯一key对两个list中的数据进行匹配,最终数据结果如下:
在这里插入图片描述


总结

合理的使用stream操作能够简化代码,提高效率和代码质量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值