Guava functional -- Function
2016-06-19 17:29
375 查看
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(下面有例子).
这个接口包含以下两个方法。
下面我们根据实际的例子来看怎么使用这个类。
基础类:
以上差不多就是Function类的使用方法,至于其它用法。就看大家去挖掘了。
这次主要介绍是的是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 @ToString public 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"); List<User> users = Lists.newArrayList(user1, user2, user3); Function<User, String > nameFunction = new Function<User, String>() { @Override public String apply(User input) { if(null == input){ return ""; } return input.getName(); } }; // when Collection<String> 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"); List<User> users = Lists.newArrayList(user1, user2, user3); Function<User, String > nameFunction = new Function<User, String>() { @Override public String apply(User input) { if(null == input){ return ""; } return input.getName(); } }; Function<String, String> upperCaseFunction = new Function<String, String>() { @Override public String apply(String input) { if(null == input){ return ""; } return input.toUpperCase(); } }; Function<User, String> composedFunction = Functions.compose(upperCaseFunction, nameFunction); // when Collection<String> names = Collections2.transform(users, composedFunction); // then assertThat(names).contains("CARL", "KEVIN", "ERIN"); }
3、根据list的Key值,获取Map中对应的value值
@Test public void shouldUseForMapFunction(){ // given Map<String,String> map = Maps.newHashMap(); map.put("carl", "26"); map.put("kevin", "24"); map.put("erin", "25"); // when Function<String, String> nameForAge = Functions.forMap(map); List<String> names = Lists.newArrayList("carl", "kevin", "erin"); // then Collection<String> ages = Collections2.transform(names, nameForAge); assertThat(ages).containsOnly("24", "25", "26"); }
4、针对第3种情况,如果key值找不到对应的Value会报错,但是可以给默认值
@Test public void shouldUseForMapFunctionWithDefaultValue(){ // given Map<String,String> map = Maps.newHashMap(); map.put("carl", "26"); map.put("kevin", "24"); map.put("erin", "25"); // when Function<String, String> nameForAge = Functions.forMap(map, "Unknown"); List<String> names = Lists.newArrayList("carl", "taylor"); // then Collection<String> ages = Collections2.transform(names, nameForAge); assertThat(ages).containsOnly("26", "Unknown"); }
以上差不多就是Function类的使用方法,至于其它用法。就看大家去挖掘了。
相关文章推荐
- Intent和IntentFilter
- 搭建自己的Spring Initializr服务器
- 关于adb不能启动的问题
- FragmentTransaction.replace() 你不知道的坑
- javascript进阶学习过程中函数的调用问题
- Qml && Qt HTML Base64
- 对线性回归、逻辑回归、各种回归的概念学习
- Count Complete Tree Nodes
- eclipse在ubuntu下无法设置以及新建工程卡死解决方案
- 初识Hibernate的几种方式
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid
- Android之使用Camera拍照
- UITableView section header 不固定
- 进度条16
- 文件管理命令及相关知识
- JMeter事务控制器(Transaction controller)
- 【Javascript】——三大保存用户状态信息技术
- SQL Server锁类型
- while DEMO
- 20145204《java程序设计》课程总结