例子 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}

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

jdk8 Function的更多相关文章

  1. JDK8 - Function介绍

    注:写这个文档只是为了方便加深记忆,加强理解,重点关注两个default方法中泛型[V]. JDK8作为一个还在维护阶段的长期版本,势必会在企业应用中占据相当大的市场份额,所以还是以JDK8作为例子的 ...

  2. Java函数式接口Function

    Function 提供了一个抽象方法  R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...

  3. Java8新特性Function、BiFunction使用

    闲话不多说,直接看代码,注释都写的很清楚了. package com; import java.util.function.BiFunction; import java.util.function. ...

  4. 你竟然不知道Java中可以用 :: 吗?

    简介 Java8中方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方 ...

  5. 面试官写了个双冒号: : 问我这是什么语法?Java中有这玩意?

    一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用, ...

  6. 通过百度echarts实现数据图表展示功能

    现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...

  7. JDK8新特性 -- Function接口: apply,andThen,compose

    1 Function<T, R>中的T, R表示接口输入.输出的数据类型. R apply(T t) apply: .例子:func是定义好的Function接口类型的变量,他的输入.输出 ...

  8. JDK7和JDK8一些重要新特性

    jdk7新特性(部分) switch支持字符串 List AutoCloseable接口实现自动关闭,在try()中 新增获取环境信息的工具方法,getJavaHomeDir,getUserHomeD ...

  9. centos下安装JDK8的方法

    判断是否安装 首先,我们得判断机子上是不是安装了jdk,好多人推荐使用java -version命令.我的计算机上使用java -version命令,内容如下: java version " ...

随机推荐

  1. Android疑难杂症之android:configChanges="orientation" 无效

    通常情况下,当“屏幕方向”变化时会销毁并重建当前Activity.而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity: <a ...

  2. Traefik的TLS配置

    生产环境的部署大多采用F5+ Traefik这种方式,因为Traefik的SSL方式相对来说比较慢,因此SSL更多的在F5上开放,而F5到Traefik之间以及后端都是http方式. 但客户需要在开发 ...

  3. iOS:iOS开发系列–打造自己的“美图秀秀”(上)

    来源: KenshinCui 链接:http://www.cnblogs.com/kenshincui/p/3959951.html 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功 ...

  4. JQuery选择器中的一些注意事项

    1. 选择器中含有特殊符号的注意事项 1. 1 选择器中含有",","#","("或"]"等特殊字符 根据w3c的规定, ...

  5. http://blog.csdn.net/a9529lty/article/details/6454156

    http://blog.csdn.net/a9529lty/article/details/6454156

  6. ubuntu 不是 识别 android 设备 解决方法

    ubuntu: 在终端输入lsusb: langu@langu:~$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root ...

  7. 记一次vue2路由参数传递this指针问题

    需要船体一个data()内的对象到另一个页面. <player-card v-for="(note, key) in sortedtNodes" :imgurl=" ...

  8. HTML5基础知识汇总_(2)自己定义属性及表单新特性

    自己定义属性data-* 说起这个属性,事实上如今非经常见了;怎么说呢,由于在一些框架都能看到他的身影!!! 比方Jquery mobile,里面非常频繁的使用了这个属性; 这个属性是哪里来的-.当然 ...

  9. 绘制函数y=(x^2-2x+1)/(x^2+x+2)的曲线

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  10. 云计算之路-试用Azure-飞流直下三千尺:实测虚拟机磁盘IO

    Azure的Temporary Storage(临时存储)磁盘的IO速度曾经是个传说,只知道它很快,但不知道究竟有多快.而Azure中国的情况怎么样,我们来实测一下. 测试环境:Azure上海机房,1 ...