Java 8 新特性简单介绍:
Lambda 表达式:允许将函数作为一个方法的参数(函数作为参数传递进来),函数主体用 -> 关联起来:例如:x -> System.out.println(x)
方法引用:简单来说就是通过方法的名字引用一个方法(使用 :: 的形式),例如:System.out::println。参数传递的逻辑通过程序上下文推断传入
函数式接口:函数式接口有且仅有一个抽象的方法,但还可以继承多个有非抽象方法的接口。可以通过一个 Lambda 表达式的方式实现一个接口式函数,
例如:
Predicate <T> 函数式接口的使用:
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for(Integer n: list) {
if(predicate.test(n)) {
System.out.println(n + " ");
}
}
}
// 调用
eval(list, n -> n > 3);
可以通过具体参考:https://www.runoob.com/java/java8-functional-interfaces.html
默认方法:Java 8 新增了接口的默认方法,简单来说就是接口可以有实现方法,而不需要实现类再去实现其方法。目的主要是为了解决:接口的修改与现有的实现不兼容问题。例如:
public interface demo01 {
default void print1() {
System.out.println("test default method...");
}
// Java 8 还有一个新特性:接口可以声明(并给出实现)静态方法
static void print2() {
System.out.println("test static method...");
}
}
Stream 流:Java 8 提供了一个新的抽象 Stream 流,可以让你用声明的方式去处理数据。这种风格将要处理的元素看作一种流,流在管道中传输,我们可以在管道的一些节点位置对流进行处理,例如:筛选、排序、聚合等。
package testJava8;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class testStream {
public static void main(String[] args) {
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
// 测试流的使用
List<Integer> collect = integerList.stream()
.map(i -> i * i)
.sorted((x, y) -> y - x)
.collect(Collectors.toList());
collect.forEach(System.out::println);
List<String> stringList = Arrays.asList("a", "b", "c", "d", "e");
Map<Integer, String> map = stringList.stream()
.collect(Collectors.toMap(str -> stringList.indexOf(str), str -> str));
map.forEach((key, value) -> System.out.println(key +":"+ value));
}
}
具体参考:https://www.runoob.com/java/java8-streams.html
Optinal 类:可以理解为是一个存放 <T> 类型的容器,也可以存储 null 属性,主要解决了空指针异常问题。
package testJava8;
import java.util.Optional;
public class testOptional {
public static void main(String[] args) {
// 可以传入一个 null 不报 NullPointerException 错
Optional<Integer> integerOptional = Optional.ofNullable(null);
// Optional.empty
System.out.println(integerOptional);
}
}
具体参考:https://www.runoob.com/java/java8-optional-class.html
日期格式API:Java 8 提供了新的本地化日期时间 API:LocalDate、LocalTime、LocalDateTime这三种日期形式。也提供了新的 DateTimeFormatter 格式转换。
例如:
package testJava8;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class testNewDate {
public static void main(String[] args) {
LocalDate nowDate = LocalDate.now();
LocalTime nowTime = LocalTime.now();
LocalDateTime nowDateTime = LocalDateTime.now();
// 2021-03-29
System.out.println(nowDate);
// 15:59:55.599
System.out.println(nowTime);
// 2021-03-29T15:59:55.600
System.out.println(nowDateTime);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
// 2021/03/29 16:04:53
System.out.println(dtf.format(nowDateTime));
// 传入 String 类型的时间与指定的转换格式相对应时期转换为 LocalDatetime 类型
LocalDateTime parseDateTime = LocalDateTime.parse("2021/03/29 16:04:53", dtf);
// 2021/03/29 16:04:53
System.out.println(parseDateTime);
}
}
具体参考:https://www.liaoxuefeng.com/wiki/1252599548343744/1303871087444002