Java8特性
日期时间
-
时间的创建
- LocalDateTime
-
时间的获取
- get
-
时间的计算
-
plus
-
minus
-
-
时间的修改
- with
-
时间的转换
-
Formatter.ofPattern
-
toInstant().toEpochMilli
-
获取当前时间戳
//⽅法⼀System.currentTimeMillis();
//⽅法⼆Calendar.getInstance().getTimeInMillis(); 最慢
//⽅法三new Date().getTime();
Lambda表达式
也称为:闭包closure
允许把函数作为一个方法的参数,使代码变的更加简洁紧凑
代替以前经常写的匿名内部类来实现接口,本质是一个匿名函数
(a,b)->{return a+b;}
或者
(a,b)-> a+b;
左侧的括号: 函数式接口里面定义的抽象方法的形参列表
箭头: Lambda表达式的操作符,看见这个箭头,就可以认为他是一个Lambda表达式
右侧Lambda体: 函数式接口中,我们实现了函数式接口抽象方法的方法体
接口增强
默认方法,静态方法,函数式接口(supplier,consumer,function,predicate)
默认方法default
@FunctionalInterface
public interface XXX {
//默认方法
default int testDefaultMethod(int a,int b){
return a+b;
}
}
静态方法语法static
@FunctionalInterface
public interface XXX {
//静态方法
static int testStaticMethod(int a,int b){
return a+b;
}
}
函数式接口
-
首先的是一个接口
-
接口内有且只有一个抽象方法
-
为防止破坏函数式接口,最好是在接口上使用
-
@FunctionalInterface注解修饰
供给型函数接口supplier
消费型函数接口consumer
常见函数式接口
-
java.util.function包下函数式接口
- java.lang.Runnable
-
其他包常见的函数式接口
-
BiConsumer<T,U>代表了一个接受两个输入参数的操作,并且不返回任何结果
-
BiFunction<T,U,R>代表了一个接受两个输入参数的方法,并且返回一个结果
-
方法引用::
操作符::
对于右侧的Lambda体,仅仅只是调用一个已经存在的方法,可以使用方法引用的方式调用这个已经存在的方法。
-
类静态方法引用
-
实例方法引用
-
类普实例方法引用
-
构造方法引用
Stream
Java8新加入的API,主要用于一组数据的操作,它的处理方式与传统的方式不同,称为"数据流处理",关注的是对数据的筛选、查找、存储等。
就是将集合/数组/文件/函数等数据转换成流之后再处理(比如对集合数据进行过滤,排序等操作)
Stream并不是数据结构所以不能保存数据,主要目的在于计算。
Stream实例化中间操作(过滤、排序、映射、规约)终止操作(匹配查找、归约、收集)
正则表达式RegExp
^开始
$结束
/.../i i表示不区分大小写
\d 查找数组
[abc]
[^abc]
search
split
match
replace替换