Guava functional -- Function
发布日期:2021-06-29 12:51:41
浏览次数:2
分类:技术文章
本文共 3777 字,大约阅读时间需要 12 分钟。
Guava全文介绍地址:Google Guava
这次主要介绍是的是com.google.common.base.Function.在JDK8之前Java是不能使用函数式编程的,但是Guava给予了我们这样的能力。Function就是这样其中的一个类。而且大多数时候Function是和Functions是组合来使用的,Function大概有以下用法: 1. 定义的函数可以用于执行操作(函数)在许多对象. 2. 它是用来转换集合使得它变成不同类型的集合. 3. 它主要是使用Colllections2, Lists, Iterables, Iterators, 等集合工具类中的transform()方法. 4. Function类提供了一些预定义的功能,并允许多个function组合成更复杂的Function(下面有例子). 这个接口包含以下两个方法。T apply(F input)用于对象转换boolean equals(Object object)判断另一个对象是否等于这个function
下面我们根据实际的例子来看怎么使用这个类。
基础类:@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublic class User implements Serializable { /** 身份证号 */ private long idCard; /** 姓别(0 - 未知,1 - 男,2 - 女) */ private int gender; /** 姓名 */ private String name;}
1、一般用法
从集合对象中取出
@Test public void gainNameForUser(){ // given User user1 = new User(1L, 1, "carl"); User user2 = new User(2L, 1, "kevin"); User user3 = new User(3L, 2, "erin"); Listusers = Lists.newArrayList(user1, user2, user3); Function nameFunction = new Function () { @Override public String apply(User input) { if(null == input){ return ""; } return input.getName(); } }; // when Collection names = Collections2.transform(users, nameFunction); // then assertThat(names).contains("carl", "kevin", "erin"); }
2、多个Function组合使用
@Test public void shouldComposeTwoFunctions(){ // given User user1 = new User(1L, 1, "carl"); User user2 = new User(2L, 1, "kevin"); User user3 = new User(3L, 2, "erin"); Listusers = Lists.newArrayList(user1, user2, user3); Function nameFunction = new Function () { @Override public String apply(User input) { if(null == input){ return ""; } return input.getName(); } }; Function upperCaseFunction = new Function () { @Override public String apply(String input) { if(null == input){ return ""; } return input.toUpperCase(); } }; Function composedFunction = Functions.compose(upperCaseFunction, nameFunction); // when Collection names = Collections2.transform(users, composedFunction); // then assertThat(names).contains("CARL", "KEVIN", "ERIN"); }
3、根据list的Key值,获取Map中对应的value值
@Test public void shouldUseForMapFunction(){ // given Mapmap = Maps.newHashMap(); map.put("carl", "26"); map.put("kevin", "24"); map.put("erin", "25"); // when Function nameForAge = Functions.forMap(map); List names = Lists.newArrayList("carl", "kevin", "erin"); // then Collection ages = Collections2.transform(names, nameForAge); assertThat(ages).containsOnly("24", "25", "26"); }
4、针对第3种情况,如果key值找不到对应的Value会报错,但是可以给默认值
@Test public void shouldUseForMapFunctionWithDefaultValue(){ // given Mapmap = Maps.newHashMap(); map.put("carl", "26"); map.put("kevin", "24"); map.put("erin", "25"); // when Function nameForAge = Functions.forMap(map, "Unknown"); List names = Lists.newArrayList("carl", "taylor"); // then Collection ages = Collections2.transform(names, nameForAge); assertThat(ages).containsOnly("26", "Unknown"); }
以上差不多就是Function类的使用方法,至于其它用法。就看大家去挖掘了。
转载地址:https://carlzone.blog.csdn.net/article/details/51713181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月15日 19时22分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
APP页面布局参考
2019-04-29
linux 的 Socket IO 模型
2019-04-29
APP调用服务器API设计
2019-04-29
Opencv+Zbar二维码识别(标准条形码/二维码识别)
2019-04-29
zbar优化
2019-04-29
微信扫码登录验证PHP代码(不用开放平台)
2019-04-29
CH554E USB单片机 10引脚小封装低成本USB方案
2019-04-29
windows MQTT客户端
2019-04-29
LINUX下挂载(mount)查看树莓派镜像文件
2019-04-29
基于CH568芯片加密SD卡方案
2019-04-29
1元钱的超低成本单芯片USB单片机方案
2019-04-29
单片机/树莓派扩展双串口(TTL和RS485)
2019-04-29
JAVA(android)提取WIFI客流探针MAC地址源码
2019-04-29
基于CH568芯片的SATA电子盘方案
2019-04-29
linux下C语言判断网络是否连接
2019-04-29
STM32Cube_FW_F4_V1.17 F4固件包百度网盘下载
2019-04-29
猿来绘Java-35-线程的同步(生产者和消费者问题)
2019-04-29
猿来绘Java-36-解决线程安全问题
2019-04-29
猿来绘Java-37-ReentrantLock解决线程安全问题
2019-04-29