Lambda

为什么要使用lambda表达式

lambda表达式是一个匿名函数,更简洁、灵活,是一种紧凑的代码风格。

lambda表达式的本质

接口的实例

对比

  1. //不使用lanbda
  2. Runnable runnable = new Runnable() {
  3. @Override
  4. public void run() {
  5. System.out.println("测试");
  6. }
  7. };
  8. //使用
  9. Runnable runnable1 = () -> System.out.println("测试");
  10. runnable1.run();
  11. //不使用
  12. Comparator<Integer> comparator = new Comparator<Integer>() {
  13. @Override
  14. public int compare(Integer o1, Integer o2) {
  15. // TODO Auto-generated method stub
  16. return Integer.compare(o1, o2);
  17. }
  18. };
  19. //使用
  20. Comparator<Integer> comparator1 = (o1,o2) -> Integer.compare(o1, o2);
  21. //方法引用
  22. Comparator<Integer> comparator2 = Integer :: compare;

lambda的使用

  1. 举例: (o1,o2)-> Integer.compara(o1,o2);
  2. 格式
    1. -> :lambda操作符或者箭头操作符
    2. ->左边: lambda形参列表(接口中抽象方法的形参列表)
    3. ->右边:lanbda体(抽象方法的方法体)
  3. lambda表达式的使用:

    1. //1. 语法格式一:无参,无返回值
    2. Runnable runnable1 = () -> {
    3. System.out.println("测试");
    4. };
    5. //2. 语法格式二:有一个参数,无返回值
    6. Consumer<String> consumer = (String t) -> {
    7. System.out.println(t);
    8. };
    9. //3. 语法格式三:数据类型可以省略,因为可以由编译器推断得出,称为“类型推断”
    10. Consumer<String> consumer1 = (t) -> {
    11. System.out.println(t);
    12. };
    13. //4. 语法格式四:若有左边的形参只有一个,可以省略小括号
    14. Consumer<String> consumer2 = t -> {
    15. System.out.println(t);
    16. };
    17. //5. 语法格式五:若需要两个以上的参数,多条执行语句,并且可以由返回值
    18. Comparator<Integer> comparator = (o1,o2) -> {
    19. System.out.println(o1);
    20. System.out.println(o2);
    21. return Integer.compare(o1, o2);
    22. };
    23. //6. 语法格式六:若只有一条执行语句,retuen和大括号若有都可以省略
    24. Comparator<Integer> comparator1 = (o1,o2) -> Integer.compare(o1, o2);

    总结

  4. ->左边:参数类型可以省略(类型推断),如果只有一个参数,可以省略小括号

  5. ->右边:如果只有一条执行语句,可以省略return和大括号,
  6. 接口只有一个抽象方法(函数式接口)