相信每一位java面试者都会问一个问题,你知道jdk1.8新特性吗?
当在回答这个问题的时候,我们都会说一大堆,比如说,可以支持lambda表达式,引入Optional类让开发开始手动检查null,避免运行时候的NPE等等,可是,对于一名java从业者来说,我觉得不够,没有说到点子上,如果面试官很水,当然就让你过啦,然后拿到了一份薪水不错的java开发工作,那么,JAVA8的新特性到底是什么?
首先,我们想这么一种需求,如果要处理一个集合,集合中有各种类型的字符串,有数字,有字母,还有一些乱七八糟的符号,现在,要从这个集合中找出大于10的偶数,按从小到大的顺序找出前三个,你会怎么做?
在jdk1.8以前,我们会定义一个类,然后定义一个静态方法(或者不是静态方法),该方法接收一个String类型的参数,然后方法体中首先拿到这个参数,对这个参数执行判断,判断是数字的话就留下,然后拿到数字之后将数字放到一个集合中,然后调用集合的sort方法,然后输出前五个,然后返回。
这种方法有重要的几个概念,第一个,1、面向对象。你定义了一个类,别人在用这个类的时候,必须将这个类实例化(静态方法除外),然后通过这个实例调用这个处理String的方法,获取这个方法的返回值。第二个,2、命令式编程。你在这个方法中,第一步干什么,第二步干什么、第三步干什么等等他的执行顺序完全是按照你书写顺序进行的,你在告诉计算机第一步做什么,第二步做什么,第三步做什么(其实,是怎么做)。
进入到java8以后呢?针对这个需求,你的实现方式不一样了。
首先,你不再为了接耦合新创建一个类了,而是直接在需要这个结果的类中直接定义一个集合类型的变量,然后,你会将这个String类型的变量通过chars()方法转进行转换,得到的是int的流,然后再调用mapToObj()方法将int转换为Char,将得到的char进行过滤操作,然后再进行排序等等,最后直接得到了这个数数字集合。
在这里,你没有新起一个类去处理了,而是直接在需要的地方直接处理,同时利用一些转换方法,对String进行转换、提取、过滤最后排序,得到了你想要的结果。这里面就体现了一个重要的概念:函数式编程。根据我们操作的结果,函数式编程的直接改变就是,你不再创建一个对象去达到你的目的,而是直接处理。这叫做面向函数编程(有的地方也叫函数式编程),这是最大的一个变化,这也是java8新特性的最大的一个特性。请记住,你之前查过的所有关于java8新特性都是围绕着这一个展开的。包括函数式接口、接口默认方法、Lambda表达式,流的处理,一切的一切,都是为了更好的支持函数式编程而进行的改变。
所以,面对java8最大的特性,就是由之前的只支持面向对象编程(达到目的必须创建一个类或者通过类中的方法去达到目的(当然,这一切是在严格遵守java开发解耦合的思想进行的哈))现在也支持函数编程(你为了达到目的时,不再依赖于类,甚至不依赖于方法,而是直接写一个函数),函数式编程强调接收一个值,然后给你返回一个新的值,期间并不改变你输入值。
个人敢想,欢迎大神们进行补充讨论
标签:函数,一个,编程,特性,深刻理解,然后,集合,方法,JAVA8 From: https://blog.csdn.net/m0_72897587/article/details/144612648