1.Lambda表达式使用前后的对比:

  1. 举例一:
  2. @Test
  3. public void test1(){
  4. Runnable r1 = new Runnable() {
  5. @Override
  6. public void run() {
  7. System.out.println("我爱北京天安门");
  8. }
  9. };
  10. r1.run();
  11. System.out.println("***********************");
  12. Runnable r2 = () -> System.out.println("我爱北京故宫");
  13. r2.run();
  14. }
  15. 举例二:
  16. @Test
  17. public void test2(){
  18. Comparator<Integer> com1 = new Comparator<Integer>() {
  19. @Override
  20. public int compare(Integer o1, Integer o2) {
  21. return Integer.compare(o1,o2);
  22. }
  23. };
  24. int compare1 = com1.compare(12,21);
  25. System.out.println(compare1);
  26. System.out.println("***********************");
  27. //Lambda表达式的写法
  28. Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
  29. int compare2 = com2.compare(32,21);
  30. System.out.println(compare2);
  31. System.out.println("***********************");
  32. //方法引用
  33. Comparator<Integer> com3 = Integer :: compare;
  34. int compare3 = com3.compare(32,21);
  35. System.out.println(compare3);
  36. }

2.Lambda表达式的基本语法:

  1. 举例: (o1,o2) -> Integer.compare(o1,o2);
  2. 格式:

    ->:lambda操作符 或 箭头操作符
    ->左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表
    ->右边:lambda体 (其实就是重写的抽象方法的方法体

3.如何使用:分为六种情况

image.png
image.png

总结六种情况:

  • 左边:lambda形参列表的参数类型可以省略(类型推断);如果lambda形参列表只一个参数,其一对()也可以省略
  • 右边:lambda体应该使用一对{}包裹;如果lambda体只一条执行语句(可能是return语句,省略这一对{}和return关键字