首页 > 编程语言 >深刻理解JAVA8新特性

深刻理解JAVA8新特性

时间:2024-12-22 18:26:44浏览次数:9  
标签:函数 一个 编程 特性 深刻理解 然后 集合 方法 JAVA8

相信每一位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

相关文章

  • Java 8 特性: Lambda 表达式、Stream API、Optional 类等
    Java8引入了很多新的特性,极大地增强了Java语言的表达能力和开发效率。以下是一些主要的新特性1.Lambda表达式Lambda表达式允许以更简洁的方式表示匿名函数,使得代码更加简洁和可读。它支持函数式编程风格,并可以作为参数传递给方法。语法:(parameters)->expres......
  • 第4章 C#的高级特性
    第4章C#的高级特性4.1委托4.1.2多播委托对值为null的委托变量进行+​或+=​操作,等价于为变量指定一个新值:SomeDelegated=null;d+=SomeMethod1;//等价于d=SomeMethod1委托是不可变的,因此调用+=​和-=​的实质是创建一个新的委托实例,并把它......
  • MySQL 8.0 新特性详解
    MySQL8.0引入了许多重要的功能和改进,这些特性显著提升了数据库的性能、可用性和开发体验。以下是MySQL8.0的主要新特性及其详细解析:降序索引支持MySQL8.0支持降序索引,而之前版本即使语法支持,实际仍为升序。通过降序索引,查询性能在某些场景中得到显著优化。示例CR......
  • css4你有听说过吗?你最期待的css4拥有什么样的新特性?
    实际上,"CSS4"并不是一个官方或广泛使用的术语。CSS(级联样式表)的发展是一个持续的过程,新的功能和属性会不断地添加到规范中,而不是按照版本发布。然而,为了简化交流,有时人们会用“CSS4”来指代未来可能出现的CSS新功能和改进。就我个人而言,我期待未来CSS的发展能包含以下特性:更强......
  • 只谈C++11新特性 - nullptr
    nullptr在C++11标准中,引入了nullptr关键字,用来表示空指针。这是对原有NULL的重要改进,提供了更强的类型安全性,并避免了一些常见的编程错误。1.nullptr的特点nullptr是一种新类型std::nullptr_t的常量,用于表示空指针。与NULL不同,nullptr具有明确的指针类型......
  • Python 高级特性:描述器(Descriptor)简介
    Python高级特性:描述器(Descriptor)简介原创 defr bebettercoder 2024年12月01日20:00 广东1.什么是描述器描述器(Descriptor)是Python中一个强大而优雅的特性,它允许我们自定义对象属性的访问方式。简单来说,描述器就是一个实现了描述器协议的类,这个协议包含 __get__......
  • 解析堡垒机:功能特性、优势劣势与类型一览
    堡垒机,又称运维审计系统、跳板机,是一种位于内部网络与外部网络之间的安全防护设备。核心功能身份认证:支持多种认证方式,如静态口令、动态口令、硬件key、生物特征等,还可与第三方认证服务器结合,确保只有合法用户能够登录。账号管理:对所有服务器、网络设备、安全设备等账号进行集......
  • 硬件工程师必看——电容特性
    1.电容两端的电压差不能突变注意这里说的是电压差而不是电压,电压是可以突变的。先让电容上端的电压为5V再断开开关让下端的开关为5v,可以发现上面的电压变成10v了,证明电容两端电压可以突变,但是电容的电压差不可以突变。2.电容的储能特性电容相当于一个小电池他是可以储......
  • 数据特性库 前言
    文章目录一、num-traits库简介二、核心功能三、更新功能四、使用方式五、应用示例六、结论一、num-traits库简介num-traits是Rust编程语言中的一个开源库,专注于为数值类型提供一系列的数学运算特性和接口。它支持泛型数学计算,允许开发者在不指定具体数字类型的情况......
  • 【数值特性库】入口文件
    入口文件lib.rs://!为泛型准备的数字特征库#![doc(html_root_url="https://docs.rs/num-traits/0.2")]#![deny(unconditional_recursion)]#![no_std]//需要显式地将crate引入固有的float方法。Needtoexplicitlybringthecrateinforinherentfloatmethods......