博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8基础学习(一)- Founction接口
阅读量:4211 次
发布时间:2019-05-26

本文共 1663 字,大约阅读时间需要 5 分钟。

目前的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的解析就到这里了。

转载地址:http://gqkmi.baihongyu.com/

你可能感兴趣的文章
ThreadLocal学习笔记
查看>>
用talib实现基于emv的简易量化投资策略
查看>>
LongAdder源码解析
查看>>
Talib学习笔记(二)- 价格指数学习
查看>>
CAS机制是什么?
查看>>
Semaphore源码解析
查看>>
ConcurrentLinkedDeque源码解析
查看>>
ReentrantLock源码解析
查看>>
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>
JVM垃圾回收相关知识笔记
查看>>
Curator学习笔记(一)- 读写锁
查看>>
第一次炒股小记
查看>>
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>