文章系学习Java8新特性

教程地址: Java8简明教程

在接口中定义默认方法

  • 通过static修饰, 该方法不可被重写.
  • 通过default修饰, 该方法不仅仅默认实现, 还可以被实现类重写

示例代码

/**
 * Created by imyzt on 2019/1/17 10:59
 * 可以在接口中定义默认方法
 */
public interface Formula {

    double calculate(int a);

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

    static int abs (int b) {
        return Math.abs(b);
    }
}

class Main {
    public static void main(String[] args) {
        Formula formula = new Formula() {
            @Override
            public double calculate(int a) {
                return sqrt(a * 1000);
            }
        };

        double calculate = formula.calculate(1);
        System.out.println(calculate);              //31.622776601683793

        double sqrt = formula.sqrt(1000);
        System.out.println(sqrt);                   //31.622776601683793

        int abs = Formula.abs(1000);
        System.out.println(abs);                    //1000
    }
}

Lambda表达式

Lambda表达式是java8最大的更新了, 使得一些操作十分简单明了.

不使用lambda表达式进行集合排序

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);
    }
});        

使用Lambda表达式进行集合排序

 Collections.sort(names, (String a, String b) -> {
     return b.compareTo(a);
});
  • 不过,还可以省去返回值的表述
Collections.sort(names, (String a, String b) -> b.compareTo(a));
  • Lambda可以自动识别类型, 因此我们可以删除掉类型声明
Collections.sort(names, (a, b) -> b.compareTo(a));
  • 当然, 也可以将具体动作简化
Collections.sort(names, Comparator.reverseOrder());
  • 最后, java8的jdk集合中实现了sort方法, 因此我们可以用最后这句话来实现集合的排序
names.sort(Comparator.reverseOrder());