【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1.8带来最核心的特性:
1.lambda(匿名函数) 基本上就是一个没有名称的方法,但和匿名类一样,它可以作为参数传递给一个方法。
1.lambda表达式的三部分:参数列表,箭头->,方法体。
2.使用场景: 只有在接受函数式接口(Compartor<T>,Runnable,Callable<V>等 以及1.8中function包中引入的几个新的函数式接口 Predicate<T>,Consumer<T>和Function<T,R>,Supplier<T>)上使用Lambda表达式。函数式接口的定义:只定义一个抽象方法的接口。
允许直接使用内联的形式为函数式接口的抽象方法提供实现,把整个表达式作为函数式接口的实例
List<Apple> greenApples = filter(inventory, (Apple a) -> "green".equals(a.getColor()));

3.方法引用 方法引用可以重复使用现有的方法定义,并像lambda一样传递给它们。
inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()));
inventory.sort(comparing(Apple::getWeight));
2.流式处理(Stream) 并行处理流元素,可以很好地利用多核处理器。
3.行为参数化(方法和lambda表达式作为一等公民,可以作为参数传递) 就是一个方法接受多个不同的行为作为参数,并在内部使用它们,完成不同行为的能力。
4.函数式编程 比如java8里面的Optional<T> 对空的处理
List<Apple> heavyApples1 = inventory.stream().filter((Apple a) -> a.getWeight() > 150) .collect(toList());
来源:oschina
链接:https://my.oschina.net/u/3126880/blog/3144108