例子 1:

// 定义function
Function<String, String> fun = parm -> {
// 这里是定function中的逻辑
return String.valueOf(parm + "xing");
}; Function<String, String> fun1 = parm -> {
// 这里是定function中的逻辑
return String.valueOf(parm + "sheng");
};
/*
* @param a 第一个执行
* @param fun 第三个
* @param fun1 第二个
* @return
*/
public static String test3(String a, Function<String, String> fun,Function<String, String> fun1) {
return fun.compose(fun1).apply(a);
}
// compose 源码
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
System.out.println(test3("zhang",fun,fun1));
// 输出结果 zhangshengxing

// 例子2 list 转map

// 初始化 测试数据
List<User>userList=new ArrayList<>();
userList.add(User.builder().age().name("zhang").build());
userList.add(User.builder().age().name("wang").build());
userList.add(User.builder().age().name("li").build());
userList.add(User.builder().age().name("zhao").build());
userList.add(User.builder().age().name("sun").build());
/**
*
注:Flux 是 reactor 框架中的类,表示0~1个异步序列。Flux.fromIterable(a) 从a中获取一个 Iterable遍历器
从a中获取一个 Iterable遍历器,并使用collectMap(fun,fun1) 函数式方法,block 是堵塞 直到遍历完成
Map<V,R> : V 是map的key, R map的值
例子2 是将list 转为 map<name,age> 形式.
调用 test7(userList,User::getName,User::getAge) 此时,User::getName 是 fun的执行逻辑,User::getAge 是 fun1 的执行逻辑。这两个方法引用
就是从遍历的User中取出name和age 。
Fun<K,V> V 为出参,也就是map 的 key
Fun1<K,R> R为出参,也就是map 的 value
Fun,fun1 必须要和 map<V,R> 对应
* @param a 数据源
* @param fun key 逻辑
* @param fun1 value 逻辑
* @param <K> 数据源类型
* @param <V> key 类型
* @param <R> value 类型
* @return
*/
public static <V,R,K> Map<V,R> test7(List<K> a, Function<K,V> fun, Function<K,R> fun1) {
return Flux.fromIterable(a).collectMap(fun,fun1).block();
}
Map<String,Integer>map=test7(userList,User::getName,User::getAge)
// 输出结果 {"zhang":10,"wang":11,"zhao":13,"li":12,"sun":14}

如果有错误 请大家留言指出

最新文章

  1. 媒体查询使用方法@media
  2. git的使用,通过git上传修改工程
  3. linux 解压
  4. C# 字典排序Array.Sort
  5. 广搜+打表 POJ 1426 Find The Multiple
  6. Ajax在调用含有SoapHeader的webservice方法
  7. 欧拉通路-Play on Words 分类: POJ 图论 2015-08-06 19:13 4人阅读 评论(0) 收藏
  8. HTML标签的默认样式
  9. C++ 必知必会: 条款1: 数据抽象
  10. Sqli-labs less 49
  11. 【NOIP 2016 总结】
  12. 15个极好的Linux find命令示例(二)
  13. tomcat内存溢出问题
  14. 网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点
  15. HYSBZ 1036(树链剖分)
  16. Java基础-Eclipse环境搭建(02)
  17. linux保持管道中颜色显示
  18. unity 傅老师学习
  19. 菜鸟--shell脚本编写之解决问题篇
  20. PHP:第三章——PHP中返回引用的函数

热门文章

  1. WAF防御能力评测及工具
  2. http://www.tmser.com/post-177.html
  3. http 使用curl发起https请求报错的解决办法
  4. Hive计算的临时文件清理
  5. dhclient 简介
  6. Win7如何修改文件夹的默认视图,如何把详细信息改为平铺视图
  7. Spark1.0.0 history server 配置
  8. 如何使用angularjs实现ajax异步请求
  9. iOS12适配指南
  10. 在xcode5下利用Source Control 做 git 项目管理