Java8新特性---lambda表达式

可以把Lambda 表达式理解为一种简洁的可传递匿名函数:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。

不使用lambda表达式:

Comparator<Apple> byWeight = new Comparator<Apple>() {
   public int compare(Apple a1, Apple a2){
     return a1.getWeight().compareTo(a2.getWeight());
   }
};

使用lambda表达式:

Comparator<Apple> byWeight =
  (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

 可见Lambda 表达式让你可以简洁地传递代码,其基本语法如下:

(parameters) -> expression
或
(parameters) ->{ statements; } 

  用法示例:

布尔表达式          (List<String> list) -> list.isEmpty()
创建对象          () -> new Apple(10)
消费一个对象        (Apple a) -> {
                System.out.println(a.getWeight());
             }
从一个对象中选择/抽取  (String s) -> s.length()
组合两个值         (int a, int b) -> a * b
比较两个对象       (Apple a1, Apple a2) ->
               a1.getWeight().compareTo(a2.getWeight())

在函数式接口上使用Lambda 表达式:函数式接口就是只定义一个抽象方法的接口

只有在接受函数式接口的地方才可以使用Lambda 表达式

例如:

public interface Comparator<T> {
  int compare(T o1, T o2);
}
public interface Runnable {
  void run();
}

  用匿名内部类也可以完成同样的事情,但lambda更简洁

//lambda
Runnable r1 = () -> System.out.println("Hello World 1");

//匿名类 Runnable r2 = new Runnable(){ public void run(){ System.out.println("Hello World 2"); } }; public static void process(Runnable r){ r.run(); } process(r1); process(r2);
//直接传递lambda process(() -> System.out.println("Hello World 3"));

  

 

上一篇:使用java8将list转为map


下一篇:从代码重构角度聊一聊java8的函数式接口