Java新特征学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cszhang570221322/article/details/76919200

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.csdn.net/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.csdn.net/gdouchufu/article/details/29235975

 

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

 

 

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

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

 

感觉还是不太好用

foreach 挺方便

 

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

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

 

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

github上 stream代码

 

parallelStream() 并行流,时间少点

 

 

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

 

http://blog.csdn.net/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 没看

 

 

 

 

猜你喜欢

转载自blog.csdn.net/cszhang570221322/article/details/76919200