标签:数据 create [] creat span new t handler 方法 file
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。
应该说,相对于Java7,Java8 新增了很多特性,我们主要讨论以下几个:
1.Lambda表达式。
Lambda 表达式,也可以称为闭包,它允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
package com.itszt.test2;
import java.util.ArrayList;
import java.util.List;
/**
* JDK8的新特性
*/
public class Test {
//测试数据
public static List<Integer> list = new ArrayList<>();
public static void main(String[] args) {
int[] intArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (Integer i : intArr) {
list.add(i);
}
Test test = new Test();
//测试Lambda表达式
test.testLambda(list);
}
public void testLambda(List list) {
list.forEach(System.out::println);
list.forEach(e -> System.out.println("方式二:" + e));
}
}
2.方法引用。
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。
比如,上述代码中就使用了方法引用。再比如:
public void testMethodReference() {
//构造器引用。语法是Class::new,或者更一般的Class< T >::new,
// 要求构造器方法是没有参数
final Car car = Car.create(Car::new);
final List<Car> cars = Arrays.asList(car);
//静态方法引用。语法是Class::static_method,要求接受一个Class类型的参数;
cars.forEach(Car::collide);
//任意对象的方法引用。它的语法是Class::method。无参,所有元素调用;
cars.forEach(Car::repair);
//特定对象的方法引用,它的语法是instance::method。有参,在某个对象上调用方法,将列表元素作为参数传入;
final Car police = Car.create(Car::new);
cars.forEach(police::follow);
}
public static class Car {
public static Car create(final Supplier<Car> supplier) {
return supplier.get();
}
public static void collide(final Car car) {
System.out.println("静态方法引用 " + car.toString());
}
public void repair() {
System.out.println("任意对象的方法引用 " + this.toString());
}
public void follow(final Car car) {
System.out.println("特定对象的方法引用 " + car.toString());
}
}
3.函数式接口。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为lambda表达式。
函数式接口可以现有的函数友好地支持 lambda。
JDK 1.8之前已有的函数式接口:
JDK 1.8 新增加的函数接口:
标签:数据 create [] creat span new t handler 方法 file
原文地址:https://www.cnblogs.com/lizhangyong/p/8903444.html