stream流 concat flatMap 使用

先看代码:

/**
	 * 遍历进行中服务 拿到指定的insEmp
	 * 创建人: xxx
	 * 创建时间: 2023/04/12
	 */
	private InstoreServiceEmp getInsEmp(InstoreService ins ,int insEmpId){
		if(ins!=null && !CollectionUtils.isEmpty(ins.getServer())){
			for (InstoreServiceServer server: ins.getServer()) {
				if(!CollectionUtils.isEmpty(server.getInsEmps())){
					for (InstoreServiceEmp emp:server.getInsEmps()) {
						if(emp.getId().intValue() == insEmpId){
							return emp;
						}
					}
				}
				if(!CollectionUtils.isEmpty(server.getInsItems())){
					for (InstoreServiceItem item:server.getInsItems()) {
						if(!CollectionUtils.isEmpty(item.getRecomEmps())){
							for (InstoreServiceEmp emp:item.getRecomEmps()) {
								if(emp.getId().intValue() == insEmpId){
									return emp;
								}
							}
						}
					}
				}
			}
		}
		return null;
	}

项目中看到这种代码,让我实在是难受,看了下层级结果
ins 下包含 List server,
server 下包含 List insItems 和 List insEmps,
而 下包含 List recomEmps
[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.csdnimg.cn/cbx0c67VA9a44b4ce4a44e950dabcc9075.png)beanhttps://img-blog.csdnimg.cn/cbe470c9a44b4ce4a44e950dabcc9075.png)]
用 stream 流和optional 优化后的代码:

	private Optional<InstoreServiceEmp> getInsEmp(InstoreService ins, int insEmpId) {
		if (ins == null || CollectionUtils.isEmpty(ins.getServer())) {
			return Optional.empty();
		}

		return ins.getServer().stream()
				.flatMap(server -> Stream.concat(server.getInsEmps().stream(), server.getInsItems().stream()
						.flatMap(item -> item.getRecomEmps().stream())))
				.filter(emp -> emp.getId() == insEmpId)
				.findFirst();
	}

简洁多了,舒服了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值