java list join_java 两个 list做类似Join操作

背景

针对两个或者多个List,(即使他们内部维护的类型不同也可以)根据某个唯一的属性,比如id,name,进行类似join 操作,即分组操作。这在Spark SQL中(转为DateFrame,注册成几张表) 或者 SQL语句中很容易实现,但是在java中却没有方法可以直接完成,那么可以参考以下的方式。

转化为Map对象

首先将 list 转化为 Map 对象,以list中的某个或某几个属性作为 key,list中的对象作为 value

在 java8 中可以使用 Stream 操作快速完成

Map commonMap = entityList.stream().collect(Collectors.toMap(x->x.getName()+x.getId(), Function.identity()));

collect():接收一个 Collector super T, A, R> collector 作为参数,返回一个新的集合

Collectors.toMap():接收键值对 Function super T, ? extends K> keyMapper, Function super T, ? extends U> valueMapper 作为参数,

Function.identity():表示将当前输入对象直接返回,在这里就是 entityList 中的每一个 Entity 对象

场景一

只有两个list 的情况:

将第二个list 中的属性和第一个list 中的属性整合:

// 将第一个list 转化为map 之后,遍历第二个list,拷贝属性

for (Entity entity: entityList) {

BeanUtils.copyProperties(commonMap .get( x.getName()+x.getInstance() ), entity);

}

场景二

有多个list 的情况:

将全部list 按上述方式转换为 map 之后,对所有 map 的 key 求并集,然后遍历所有的 key 对每个map 依次取值即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值