Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Lambda实践总结

Lambda实践总结

作者头像
尚浩宇
发布于 2019-11-29 02:09:28
发布于 2019-11-29 02:09:28
50500
代码可运行
举报
文章被收录于专栏:杂烩杂烩
运行总次数:0
代码可运行

1、基础查询封装

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

函数接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@FunctionalInterface
public interface Query<T> {
	List<T> query() throws Exception;
}

工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#直接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、调用工具类实现数据库查询

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#单条
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#原样输出(主要用于中间数据处理)
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、计算

直接上码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#加
teacherVo.getTotalTeachHour()
							+ rClassSubjectVos.stream().mapToInt(RClassSubjectVo::getSubHour).sum()
#平均
teacherVo.getTotalTeachHour()
							+ rClassSubjectVos.stream().mapToInt(RClassSubjectVo::getSubHour).average()
#其它还有减、除、统计数量等等

6、判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
permissionVos.stream().anyMatch(p -> p.getIsApproval().equals((byte) 1)

7、搜索匹配

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
permissionVos.stream()
				.filter(p -> p.getDownSize() > 0 && p.getDownSize() > p.getRealDownSize()).findFirst();

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA Stream小结
Stream API可以极大提高Java程序员的生产力, 让程序员写出高效率、干净、简洁的代码.
一个架构师
2022/06/20
5280
JAVA Stream小结
让API并行调用变得如丝般顺滑的绝招
当数据量较大的时候,都会通过分库分表来拆分,分担读写的压力。分库分表后比较麻烦的就是查询的问题,如果不是直接根据分片键去查询的话,需要对多个表进行查询。
猿天地
2021/01/05
4050
Java8 新特性 -- Lambda 表达式的常规用法
后两种可以这样理解:“::” 是方法引用操作符,传递的是方法的引用,在接口调用唯一方法的时候就是在调用传递进来的方法引用,所以在以上语法的基础上,只要保持返回值和参数完全一致就能将方法传递进去。
啵啵肠
2023/11/20
1580
Java8 Lambda Stream知识分享
Java8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。
阿超
2023/10/11
7800
Java8 Lambda Stream知识分享
JDK8 Lambda & Stream使用笔记
手机用户请横屏获取最佳阅读体验,REFRENCES中是本文参考的链接,如需可百度"Yiyuery"获取CSDN或是我的个人博客地址,同步更新,文章中有对应的参考资源链接。
架构探险之道
2019/07/25
9900
java 高效列转行,java 列转行「建议收藏」
public static void main(String[] args) {
全栈程序员站长
2022/09/13
2.8K0
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
☀️相关笔记章节: 🌹java 1.8 stream使用总结(个人总结有一些经典文章的集合) 🌹遍历 ArrayList和遍历 Map的几种方式 🌹Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) 🌹List,Map多层循环嵌套Demo及其理解 🌹List,Map 三种遍历方式:(总结理解) 🌹List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历
默 语
2024/11/20
2650
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
字符数组转换及数字求和 java8 lambda表达式 demo
public static void main(String[] args) throws IllegalAccessException { //字符串转换为数字且每个加上100,输出。 String[] ids = {"100","12","23","45","68","78","99","200"}; List<Integer> list = Stream.of(ids).map(x -> Integer.valueOf(x) + 100).collect(Collectors.toList()); //编译循环 list.stream().forEach(x -> System.out.print(x+",")); //按1.8编译 Integer[] array = { 1, 2, 3, 4, 5 }; Stream.of(array).forEach(System.out::println); // prints 1, 2, 3, ... // Arrays.stream(array).forEach(System.out::println); //Mysql in 查询参数 String str = Stream.of(array).map(x -> "'"+String.valueOf(x)+"'").collect(Collectors.joining(",","(",")")); System.out.println("str="+str); //求和 // Integer sum = Stream.of(array).mapToInt(x -> x).sum(); // Integer sum = Stream.of(array).mapToInt(Integer::valueOf).sum(); Integer sum = Stream.of(array).mapToInt(x -> Integer.valueOf(x)).sum(); System.out.println("sum="+sum); }
oktokeep
2024/10/09
1210
java8 Lambda Stream collect Collectors 常用实例
字典查询和数据转换 toMap时,如果value为null,会报空指针异常 解决办法一:
Erwin
2019/12/31
3.8K0
Java8使用Stream流实现List列表的查询、统计、排序、分组
Java8提供了Stream(流)处理集合的关键抽象概念,它可以对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。Stream API 借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。
全栈程序员站长
2022/11/08
11.5K0
Java8使用Stream流实现List列表的查询、统计、排序、分组
JDK1.8的Lambda、Stream和日期的使用详解(很详细)
本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda、Stream和LocalDate日期的一些使用讲解。
田维常
2019/07/16
1.3K0
Lambda【1】-- List相关Lambda表达式使用(上篇)
Lambda在jdk1.8里面已经很好用了,在这里不讲底层的实现,只有简单的用法,会继续补全。
秦怀杂货店
2020/12/26
9790
Java8用起来,你的代码将会简化很多
Java8已经诞生好几年了,但我相信很多小伙伴并不熟悉Java8的特性,并将这些特性使用到工作中去。下面介绍一些我使用Java8的一些经验,真的将我的代码简化了很多。
Lvshen
2022/05/05
6570
Java8用起来,你的代码将会简化很多
评审代码时,这样写就不会被怼了,干货
在JDK版本普遍升级到8之后,最近参与了几次代码,好多人对JDK8中的用法不是特别熟熟悉,用的不对或者干脆用错的常有,代码评审时经常被说到,这里整理一波实用的技巧,希望大家举一反三,有所收获。
阿伟
2019/12/25
4450
关于 Java Lambda 表达式看这一篇就够了(强烈建议收藏)
Java Lambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。具体原理放到下一篇。本篇我们首先感受一下使用Lambda表达式带来的便利之处。
张乘辉
2022/04/01
3.1K1
关于 Java Lambda 表达式看这一篇就够了(强烈建议收藏)
Java8---Stream的基本用法(2)
下面列举了一些,Stream的一些基本的使用方法,比如去重,遍历,筛选,获取指定元素的等。
IT云清
2019/01/22
8270
Java Stream流:最新版技巧大揭秘,轻松搞定数据处理!
JDK1.8 中增加了Stream流,Stream流是一种流式的处理数据的风格,也就是将要处理的数据当作流,在管道中进行传输,并在管道的每个节点对数据进行处理,如过滤、排序、转换等。
码农飞哥
2023/09/03
7560
Java Stream流:最新版技巧大揭秘,轻松搞定数据处理!
Java8 Stream 设计思路解析和使用
为了弄明白这个 stream 是啥,我还特意去翻看了 Java SE 的文档🐖,今年第一次打开 哈哈哈
Java4ye
2024/01/31
3000
Java8 Stream 设计思路解析和使用
聊聊lambda
公众号链接:https://mp.weixin.qq.com/s/MFXRBr16LuGn6G2rlOFFEw
阿超
2022/09/27
6280
聊聊lambda
5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
今天要讲的Stream指的是java.util.stream包中的诸多类。Stream可以方便的将之前的结合类以转换为Stream并以流式方式进行处理,大大的简化了我们的编程,Stream包中,最核心的就是interface Stream
程序那些事
2020/07/28
8580
5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
相关推荐
JAVA Stream小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档