JDK8 新特性总结
Java8 新增了非常多的特性,我们主要讨论以下几个:
- Lambda 表达式
- 函数式接口
- 方法引用 / 构造器引用
- Stream API
- 接口中的默认方法 / 静态方法
- Optional 类
- 新时间日期 API
- Base64
- 其他新特性(Nashorn JavaScript)
一、Lambda 表达式
Lambda语法
一行执行语句的写法:
(parameters) -> expression
//当只有一个参数时,可省略括号
如果有多行执行语句,可以加上{}
(parameters) -> { statements; }
另外Lambda表达式可以省略参数类型及return:
// 指定参数类型及return
(int x, int y) -> { return x + y; }
// 指定参数类型,不指定return
(int x, int y) -> x + y;
// 不指定参数类型和return,编译器会自动推断
(x, y) -> x + y;
tips:
当lambda实现的抽象方法需要return结果时,expression可理解成要被return的单条结果返回语句。
statements则是等价于方法体中的表达式,需要满足相应语法要求。
(a,b) -> ab // 满足expression
(a,b) -> a=b=ab // 满足expression
(a,b) -> return ab //这种就是错误的,等价于 return return ab
(a,b) -> { return ab; } // 满足statements,普通写法
(a,b)-> { ab; } // 这句话是错的,因为 ee 不是 statement, 而是 expression
// 下面是多表达式的情况,返回的值是显示指明 return 的地方
(int e) -> {
e = 11;
return e*3;
}
哪里使用lambda
- 你可以在函数式接口上使用Lambda表达式(函数式接口就是只定义一个抽象方法的接口。例如Comparator和Runnable)
- Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。
@FunctionalInterface
为了确保接口可以使用lambda表达式,java新增加了一个注解,@FunctionalInterface,用这个注解修饰一个接口,这个接口只能有一个抽象的方法。这类接口称为函数式接口。
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
但因为java中的接口增强了(在接口中可以使用默认方法和静态方法),这两个方法都不是抽象的,所以说用@FunctionalInterface修饰的接口还是可以包含这两类方法的。但如果定义多个抽象方法,编译器就会报错。
@FunctionalInterface
interface IInner {
void printInt(int x);
default void moren(){
System.out.println("defalut");
}
static void jingtai() {
System.out.println("static");
}
void printString();
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。