Java8基础学习(一)- Founction接口
目前的java开发基本以java8为主导地位。虽然java15已经发布了,但是语言的更新换代只是去掉不合理的,对于合理的存在是会一直保留甚至会成为一种典范。java8嫣然成为java语言重要的一环。之前在解析Juc得过程中也提到过HashMap死循环的变化,除此之外在java8得Juc和java基础集合类中基本都有函数式接口的存在,限于当时我们只是为了理解原理,所以没有进行详细说明。当时想着再java8的小专题里进行详细解释,也是对自己之前看过的java8相关的书的一种回顾,也是对自己锻炼。
这里简单理解一下Oracle为何要将Java升级到Java8?难道Java7有什么问题,对于计算机系统来说,时间和空间是计算机最珍贵的资源。时间的缩短就是依靠对自然的深入理解所产生的优秀算法。空间的减少主要依靠缓存中间变量的减少,也就是空间要更好的复用。除此之外,对于语言来说,他面向的受体的另一方就是程序员了。所以提供精简的编码体验也同样重要。如果语言的升级不是为了这两个目标,那将变得毫无意义。java8正是奔着这两个目标去的。java8的流操作提供了强大的并发执行能力,体现了时间的优化上。除此之外函数式编程、流操作让编程变得简单。之前复杂的操作在java8中只需要简单变化就可实现,而且速度很快。
所以说学好java8至少能够让我们的代码变得简洁不少,而且代码运行速度可能会有一定程度的提升。那就让我们开始吧!
Lamdba是什么?
我们看到在C#代码中有多这样的代码:
是不是感到很神奇,那么这个符号就是Lamdba表达式。那么可以将这种使用符号来灵活代替代码的编码过程就叫做Lamdba表达式。这种表达式对应得是代码,可以将表达式看做是一些代码。Lamdba的原理就是函数式编程。那么就让我们自己实现一个吧!
public class TestMyJavaMethod {
public static String print(String tt, Function t){
return (String) t.apply(tt);
}
}
public class TestMyFunction {
public static void main(String[] args) {
String test1 =TestMyJavaMethod.print("this is java 8",(s)->s.toString().toUpperCase());
System.out.println(test1);
}
}
到这里是不是对java8得lamdba感到一丝丝神奇。因为第一个参数"this is java 8"就是一个一句话而已。而第二个参数是一个lamdba表达式。在print方法中,接受这个lamdba得是Function,这样看来Function就是lamdba得接盘侠了。那么这个接盘侠是怎么炼成的?
除此之外我们发现第一个参数是入参,第二个是处理器lamdba表达式。那么如果要使用java8得lamdba是否都得这种套路?
在查阅源码之后,我们发现刚才调用的apply方法返回的是R类型,那么T就是传入的数据类型。
通过查看这里的代码,发现apply方法将传入的值进行处理并返回。compose用于前置处理,anThen则是后置处理。identity则是返回输入的值。
另外compose和andThen返回的是函数,并非值。如果需要定义比较复杂的操作,或者服用一部分代码。可以重定义这两个函数式接口。但是这样的话就需要将函数的参数形式变成独立定义的模式。
除此之外,Founction函数接口很多。在Foundation包中。
可以知道,我们只需在定义Function<T,R>中指定R的类型就可以决定到底使用的是那种Founction了,是不是感到很神奇。确实,毕竟人家就是这么定义的。
好了Founction的解析就到这里了。
- HDU----专题训练
- Golang语言之defer-再议
- HDUOJ------Lovekey
- 转-带交互的telnet小工具,golang版
- 需要了解的pssh(r11笔记第28天)
- 二分查找算法基本思想
- Flyod 算法(两两之间的最短路径)
- HDUOJ-4104 Discount
- HDUOJ-----1085Holding Bin-Laden Captive!
- HDUOJ-----1098 Ignatius's puzzle
- 转--shell脚本备份mysql数据库
- NYOJ——————数的长度(斯特林公式的应用)
- 关于ssh命令的几个使用小技巧(r11笔记第27天)
- Golang语言社区--消息触发服务器启动基础模块分享
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 数组:就移除个元素很难么?
- JavaScript 测试系列实战(二):深层渲染和快照测试
- 真是没想到,Springboot + Flowable 开发工作流会这么简单!
- 字符串:这道题目,使用库函数一行代码搞定
- 数组:总结篇
- 数组:滑动窗口拯救了你
- Gin 学习之 cookie 读写
- Gin 学习之绑定参数
- 实践 | Kubernetes守护进程集之DaemonSet
- MySQL8.0带来的两点便利
- python写归并排序
- Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
- Defi?Uniswap 项目漏洞教程新骗局
- Weblogic12c T3 协议安全漫谈
- 联盟链智能合约安全浅析