首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lambda实践总结

Lambda实践总结

作者头像
尚浩宇
发布2019-11-29 10:09:28
4470
发布2019-11-29 10:09:28
举报
文章被收录于专栏:杂烩杂烩

1、基础查询封装

这个封装,主要是用来抽象数据库查询,美化代码的(强迫症)。

函数接口

@FunctionalInterface
public interface Query<T> {
	List<T> query() throws Exception;
}

工具类

public class QueryUtil {
	public static <T> T query(Query<T> query) throws Exception {
		List<T> list = query.query();
		if (null != list && list.size() > 0) {
			return list.get(0);
		}
		return null;
	}

	public static <T> List<T> queryList(Query<T> query) throws Exception {
		List<T> list = query.query();
		if (null != list && list.size() > 0) {
			return list;
		}
		return new ArrayList<T>();
	}
}

2、遍历

遍历可以直接forEach也可以先stream()再forEach

#直接foreach
departmentVos.forEach(departmentVo -> {
			ids.add(departmentVo.getOaDeptId());
			pids.add(departmentVo.getOaDeptParentId());
			tmp.put(departmentVo.getOaDeptParentId(), departmentVo);
		});
#先stream与上等效
departmentVos.stream().forEach(departmentVo -> {
			ids.add(departmentVo.getOaDeptId());
			pids.add(departmentVo.getOaDeptParentId());
			tmp.put(departmentVo.getOaDeptParentId(), departmentVo);
		});
#特殊情况可以开启多线程
departmentVos.parallelStream().forEach(departmentVo -> {
			ids.add(departmentVo.getOaDeptId());
			pids.add(departmentVo.getOaDeptParentId());
			tmp.put(departmentVo.getOaDeptParentId(), departmentVo);
		});

3、调用工具类实现数据库查询

这个属于自己定义的函数接口

#单条
RSyncDeptPosiEmplVo rSyncDeptPosiEmplVo = QueryUtil.query(() -> {
				RSyncDeptPosiEmplVo rSyncDeptPosiEmplQc = new RSyncDeptPosiEmplVo();
				rSyncDeptPosiEmplQc.setOaUserId(currentEmpl.getOaUserId());
				rSyncDeptPosiEmplQc.setIsOn((byte) 1);
				rSyncDeptPosiEmplQc.setIsSeveralPositions((byte) 0);
				return this.irSyncDeptPosiEmplService.queryRSyncDeptPosiEmpl(rSyncDeptPosiEmplQc);
			});
#多条
List<RSyncDeptPosiEmplVo> rSyncDeptPosiEmplVos = QueryUtil.queryList(() -> {
				RSyncDeptPosiEmplVo rSyncDeptPosiEmplQc = new RSyncDeptPosiEmplVo();
				rSyncDeptPosiEmplQc.setOaUserId(currentEmpl.getOaUserId());
				rSyncDeptPosiEmplQc.setIsOn((byte) 1);
				rSyncDeptPosiEmplQc.setIsSeveralPositions((byte) 0);
				return this.irSyncDeptPosiEmplService.queryRSyncDeptPosiEmpl(rSyncDeptPosiEmplQc);
			});

4、ETL

姑且叫ETL吧

#原样输出(主要用于中间数据处理)
deptList.stream().map((dept) -> {
			return this.fillTreeData(dept, oaDeptIds);
		}).collect(Collectors.toList())
#过滤(如过滤掉null数据
deptList.stream().filter((dept) -> {
			return null==dept;
		}).collect(Collectors.toList())
#转换
deptList.stream().map(RSyncDeptPosiEmplVo::getId).collect(Collectors.toList())

5、计算

直接上码

#加
teacherVo.getTotalTeachHour()
							+ rClassSubjectVos.stream().mapToInt(RClassSubjectVo::getSubHour).sum()
#平均
teacherVo.getTotalTeachHour()
							+ rClassSubjectVos.stream().mapToInt(RClassSubjectVo::getSubHour).average()
#其它还有减、除、统计数量等等

6、判断

permissionVos.stream().anyMatch(p -> p.getIsApproval().equals((byte) 1)

7、搜索匹配

可以搜索符合条件的,也可以搜索符合条件的第一个

permissionVos.stream()
				.filter(p -> p.getDownSize() > 0 && p.getDownSize() > p.getRealDownSize()).findFirst();

暂时就这么多了,想起来再补充。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、基础查询封装
  • 2、遍历
  • 3、调用工具类实现数据库查询
  • 4、ETL
  • 5、计算
  • 6、判断
  • 7、搜索匹配
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档