Java新特征学习

一. try-with-resources jdk1.7

Java新特征学习 后

Java新特征学习

 

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

三. lambda表达式(lambda expressions) jdk8

对map的循环遍历,

Java新特征学习

 

四. map的新用法

Java新特征学习

Java新特征学习

还有上文的遍历

 

五 Java.util.Objects JDK 1.7

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

Java新特征学习

Java新特征学习

Java新特征学习

 

六 , 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方法

Java新特征学习

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

 

2、Lambda表达式

 

 

Java新特征学习

Java新特征学习

Java新特征学习

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

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

Java新特征学习Java新特征学习

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

但你改了会报错,如下

Java新特征学习

 

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

 

 

内置的lambda 表达式接口有

 

Predicate

Java新特征学习

 

Function

Java新特征学习

Suppliers

Java新特征学习

Consumers

Java新特征学习

Comparators

Java新特征学习

Runnables

Java新特征学习

Callables

Java新特征学习

 

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

Java新特征学习

 

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

http://blog.csdn.net/gdouchufu/article/details/29235975

 

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

 

Java新特征学习

 

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

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

 

Java新特征学习Java新特征学习

感觉还是不太好用

Java新特征学习

foreach 挺方便

 

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

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

 

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

github上 stream代码

 

parallelStream() 并行流,时间少点

Java新特征学习

 

 

其中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 将一个流转化为另一个流如下

 

分类

 

Java新特征学习

Java新特征学习

 

Java新特征学习

 

使用flatMap

Java新特征学习

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

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

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

 

4、 LocalDate LocalDateTime LocalTime

5、一个注解@Repeatable()

Java新特征学习

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

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

Java新特征学习

 

复习注解

@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 可以出现多次,见上面代码

 

 

多线程处理集合

Java新特征学习

6、很多强大的工具类

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

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

Files 工具类

Java新特征学习Java新特征学习

Java新特征学习Java新特征学习Java新特征学习

Java新特征学习

 

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

 

 

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

Java新特征学习

 

String类

Java新特征学习

分解

Java新特征学习

Stream 和正则结合

Java新特征学习

Steam的 chars()

Java新特征学习

但是原来的全都是 ASCII码,我用了Java新特征学习 来转成 char

 

Java新特征学习

 

Java新特征学习

Java新特征学习

 

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

 

 

 

 

相关文章: