Java8新特性

接口的默认方法

Java 8容许咱们给接口添加一个非抽象的方法实现,只须要使用 default关键字便可,这个特征又叫作扩展方法,
示例以下:java

interface Formula{
    double Formula(int a);
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}

Formula接口在拥有calculate方法以外同时还定义了sqrt方法,实现了Formula接口的子类只须要实现一个calculate方法,默认方法sqrt将在子类上能够直接使用。api

Formula formula = new Formula() {
    @Override
    public double calculate(int a) {
        return sqrt(a * 100);
    }
};

formula.calculate(100);     // 100.0
formula.sqrt(16);           // 4.0

Lambda表达式

Lambda 表达式,也可称为闭包,容许把函数做为一个参数,使代码更简洁。
Lambda表达式使用具有条件:闭包

  1. 有一个接口且只有一个A方法
  2. 把该接口对象充当B方法参数,灵活使用A方法
  3. 调用B方法,使用Lambda表达式实现A方法,充当匿名对象

传统案例:ide

List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");

Collections.sort(names, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

只须要给静态方法 Collections.sort 传入一个List对象以及一个比较器来按指定顺序排列。一般作法都是建立一个匿名的比较器对象而后将其传递给sort方法。
在Java 8 中你就不必使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:函数

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});

// 对于函数体只有一行代码的,能够去掉大括号{}以及return关键字
Collections.sort(names, (String a, String b) -> b.compareTo(a)); 
//Java编译器能够自动推导出参数类型,因此你能够不用再写一次类型
Collections.sort(names, (a, b) -> b.compareTo(a));

//如果没有参数  () ->{函数体} ()->单行函数体
//如果单个参数  a ->{函数体} a->单行函数体

Optional

Date API

相关文章
相关标签/搜索