2020-10-13 16:52:05修改,丰富Arrays.asList内容
说明:本文全面讲解java8新特性,有任何问题欢迎留言
- 注意点:HashMap:采用Hash算法求索引 数组+链表 Java8:数组+链表+红黑树
红黑树:除了添加之外其它效率更高
Objects
Arrays.asList
引入了新的操作符 “->” 该操作符把语句分为两步 参数列表+语句块
语法格式一:无参+无返回值 ()-> System.out.println();
二:有参+无返回值 (param)-> Systm.out.pringln(param); 小括号可以不写
三:多参+有返回值
Comparator com = (x,y)->{
System.out.println(“lambda”);
return Integer.compare(x,y);
};
四:多参+有返回值(一条语句) {}和return均可省略
五:数据类型可以省略,因为JVM可以通过上下文推断数据类型
lambda需要函数式接口的支持 接口只有一个抽象方法的接口 称为函数式接口 @FunctionalInterface
重点:只有一个抽象方法(静态方法,默认实现的方法,Object类的public方法,均不是抽象方法)
JAVA8接口中有多个方法
- 默认方法:default修饰的实现类方法
- 静态方法:static修饰
- Object的public方法
- 抽象方法(不加任何修饰符)
一个变量
- public static final 常量
类型推断在8之前就已经存在
lambda应用
利用四大内置的函数式接口,可以实现我们需要的绝大部分功能,我们不必再自己编写函数式接口
- Consumer:消费型接口(void accept(T t))
有参数,无返回值类型的接口。 - Supplier:供给型接口(T get())
只有产出,没人输入,就是只有返回值,没有入参 - Function<T, R>:函数型接口(R apply(T t))
输入一个类型得参数,输出一个类型得参数,当然两种类型可以一致。 - Predicate:断言型接口(boolean test(T t))
输入一个参数,输出一个boolean类型得返回值。
普通方法引用
Description: 方法引用:已经实现的lambda 方法可以直接使用
一种更简洁的lambda方法调用,lambda中调用的方法返回值类型以及参数列表要与返回类型需要与函数式接口一致(参数,返回值类型一致)
- 1.类::实例方法名
- 2.类::静态方法名
- 3.对象::实例方法名
- 注意:若lambda 参数列表的第一个参数是调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method 类::实例方法名 如果不是两个变量,则不可以使用此方法
构造方法引用
数组方法引用
Stream三步:
创建Stream,中间操作,终止操作
注意:中间操作不会立即执行,只会等到终止操作出现时,一系列中间操作开始执行(懒执行)
创建Stream:
使用中间流
终止操作
归约(reduce)
收集
将数据源经过过滤、筛选等操作收集到对应的集合或者Map,或者收集他们的统计信息,如求和、平均值、最大值、最小值、记录数等
图片来自别人的教材
开始写例子。。
在这里插入代码片
Java8的支持
简介
Optional对null提供了一个更优雅的实现。Java8新特性之一
简单教程
Optional常用方法:
1.ofNullable(),empty(),of()均为创建对象时使用,但是第一个可以创建空,of()不能创建空
2.map()可以用来进行映射,进行部分属性修改
3.filter():进行过滤,不修改原值
4.orElse和orElseGet都是实现当Optional为空时,给对象赋值。orElse参数为赋值对象,orElseGet为Supplier函数接口。
默认方法:接口中default修饰的实现方法
类优先原则,当类和方法中均有实现的某个同名方法时,优先使用类中的方法
若两个接口中有两个同名方法,则需要明确使用哪个接口中的方法
java7之前日期线程不安全,可变,java8全新的日期API不可变(线程安全)
LocalDate(日期) LocalTime(时间) LocalDateTime(日期+时间)
在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。故此,Java8引入了一套全新的日期时间处理API,新的API基于ISO标准日历系统。
二、日期初识
示例1: 获取当天日期
Java 8中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(“当前日期=” + date);
}
示例2: 构造指定日期
调用工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等
public static void main(String[] args) {
LocalDate date = LocalDate.of(2000, 1, 1);
System.out.println(“千禧年=” + date);
}
示例3: 获取年月日信息
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.printf(“年=%d, 月=%d, 日=%d”, date.getYear(), date.getMonthValue(), date.getDayOfMonth());
}
示例4: 比较两个日期是否相等
public static void main(String[] args) {
LocalDate now = LocalDate.now();
LocalDate date = LocalDate.of(2018, 9, 24);
System.out.println(“日期是否相等=” + now.equals(date));
}
三、时间初识
示例: 获取当前时间
Java 8中的 LocalTime 用于表示当天时间。和java.util.Date不同,它只有时间,不包含日期。
public static void main(String[] args) {
LocalTime time = LocalTime.now();
System.out.println(“当前时间=” + time);
}
四、比较与计算
示例1: 日期时间计算
Java8提供了新的plusXxx()方法用于计算日期时间增量值,替代了原来的add()方法。新的API将返回一个全新的日期时间示例,需要使用新的对象进行接收。
// 时间增量
LocalTime time = LocalTime.now();
LocalTime newTime = time.plusHours(2);
System.out.println(“newTime=” + newTime);
// 日期增量
LocalDate date = LocalDate.now();
LocalDate newDate = date.plus(1, ChronoUnit.WEEKS);
System.out.println(“newDate=” + newDate);
示例2: 日期时间比较
Java8提供了isAfter()、isBefore()用于判断当前日期时间和指定日期时间的比较
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/8716.html