Java新特征学习

本文深入探讨了Java 8及后续版本的重要新特性,包括Lambda表达式、Stream API、Optional类以及新的日期时间API等。此外,还介绍了如何利用这些新特性改进代码质量和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java新特征学习

一. try-with-resources jdk1.7

 后

 

二. JDK 8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。jdk 8

三. lambda表达式(lambda expressions) jdk8

对map的循环遍历,

 

四. map的新用法

还有上文的遍历

 

五 Java.util.Objects JDK 1.7

里面封装了一些常用操作如compare、equals/deepEquals、hash/hashCode、isNull/nonNull、requiredNonNull、toString这12个常用方法。

 

六 , Optional 类 jdk8 解决NPE问题 (2017年7月19日21:08:53 ) 日后

http://blog.youkuaiyun.com/hj7jay/article/details/52459334

 

 

 

https://github.com/winterbe/java8-tutorial#default-methods-for-interfaces

java8 新特性学习(根据上面github)

1、 接口的default方法

默认实现,其子类自动继承其代码,但重写后有各自的实现

 

2、Lambda表达式

 

 

总结来说 : 就是实现接口方法,直接参数->方法体(或 对象::对象的方法)其中 new字代表构造方法

其他代表 执行方法,但是当写成 from,就解析不了多个方法参数了

如果 lambda表达式范围内访问成员变量,必须为final ,虽然没有强制必须显示声明final

但你改了会报错,如下

 

接口中的d efault方法不能使用lambda表达式

 

 

内置的lambda 表达式接口有

 

Predicate

 

Function

Suppliers

Consumers

Comparators

Runnables

Callables

 

不过这么做有什么意义呢? 不如直接调用方法

 

断言接口(Predicates)、功能接口(Functions)、供应接口(Suppliers)、消费接口(Consumers)、比较接口(Comparators)、选项接口(Optionals)。

http://blog.youkuaiyun.com/gdouchufu/article/details/29235975

 

用法可能是更好支持了函数式编程,但现在还理解不来其好处。如下

 

 

要改代码,直接改 callable的实现就可以。

相当于更加简单了代码, 不用写很多接口了

 

感觉还是不太好用

foreach 挺方便

 

3、流 .stream() 还不错,很强大

对集合的过滤,筛选,修改元素 等等,执行操作后转移集合元素

 

代码全需要好好看看, 掌握,很不错 。

github上 stream代码

 

parallelStream() 并行流,时间少点

 

 

其中reduce 方法比较难以理解,网上博客

 

http://blog.youkuaiyun.com/io_field/article/details/54971679

 

说是处理并发

 

既然是流,就有关闭,java虽然给了权限关闭,但是当执行完一个流方法后会再执行流方法就会报出错误

 

stream has already been operated upon or closed

 

.filter 和 .sorted 两个方法,如果 filter 后有sorted ,则会打乱filter的顺序,会先不返回符合的stream。

其他情况正常, 会先匹配后返回符合的stream,进行接下来的代码,然后再回来接着匹配

 

map也同filter一样。

 

flatMap 将一个流转化为另一个流如下

 

分类

 

 

 

使用flatMap

得到所有article中的tag的流,然后调用collect转化为不可重复的set

好好看看java8 的steam intStream 等相关类,流操作集合,操作循环,再用上lambda

Stream 11 有点看不懂 Stream12的多线程会打乱顺序,但时不影响执行结果

 

4、 LocalDate LocalDateTime LocalTime

5、一个注解@Repeatable()

可以出现重复注解 ,在注解hints中有一个hint数组注解

@Repeatable(Hints.class) 指向数组注解    ,得到两个注解的方式有两种

 

复习注解

@FunctionalIterface 这是Java1.8 新增的注解,用于约定函数式接口。

元注解

1@Target 表示能放在什么位置,类、方法、属性

ElementType.TYPE:能修饰类、接口或枚举类型
ElementType.FIELD
:能修饰成员变量
ElementType.METHOD
:能修饰方法
ElementType.PARAMETER
:能修饰参数
ElementType.CONSTRUCTOR
:能修饰构造器
ElementType.LOCAL_VARIABLE
:能修饰局部变量
ElementType.ANNOTATION_TYPE
:能修饰注解
ElementType.PACKAGE
:能修饰包

2@Retention 表示生命周期

RetentionPolicy.SOURCE 注解只在源代码中存在,编译成class之后,就没了。@Override 就是这种注解。

RetentionPolicy.CLASS 注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。@Retention的默认值,即当没有显示指定@Retention的时候,就会是这种类型。

RetentionPolicy.RUNTIME 注解在运行起来之后依然存在,程序可以通过反射获取这些信息,

3@Inherited 表示该注解具有继承性

4、@Documented 如图所示, 在用javadoc命令生成API文档后,DBUtil的文档里会出现该注解说明。

5@Repeatable 可以出现多次,见上面代码

 

 

多线程处理集合


6、很多强大的工具类

  • Math:包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
  • Arrays:包含用来操作数组(比如排序和搜索)的各种方法。不支持二维数组。
  • Collections:包含用来操作集合(比如排序和搜索)的各种方法。
  • Paths:通过get()方法返回一个Path对象,Path用于表示文件路径和文件。
  • Files:提供了大量处理文件的方法,例如文件复制、读取、写入,获取文件属性、快捷遍历文件目录等....
  • 红色是java8新增

Paths 工具类 能找文件,转化成流过滤文件

Files 工具类

 

Files 和paths 配合stream与IO流 能实现文件过滤、查找,与集合类转换,改变转换的集合类内容等等

 

 

Map的几个新方法,常用的,但感觉还是不够用

 

String类

分解

Stream 和正则结合

Steam的 chars()

但是原来的全都是 ASCII码,我用了 来转成 char

 

 

 

剩下 concurrent (正在发生的 adj ,n共点,同时发生的事件)和nashorn 没看

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值