Java8基础学习(一)- Founction接口

时间:2022-07-25
本文章向大家介绍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的解析就到这里了。