1. 当要传递的Lambda体的操作 已经有实现的方法了 可以使用方法引用
    2. 方法引用可以看作Lambda表达式深层次的表达 换句话说 方法引用就是Lambda表达式 也就是函数式接口的一个实例 通过方法的名字来指向一个方法 可以认为式Lambda表达式的一个语法糖
    3. 要求: 实现接口的抽象方法的参数列表和返回值类型 必须与方法引用的方法参数列表和返回值类型保存一致
    4. 格式: 使用操作符 “::”将类(或对象)与方法名分隔开来
    5. 如下三种主要使用情况
      1. 对象::实例方法名称
      2. 类::静态方法名称
      3. 类::实例方法名称 ```java /**
      • @author:LYY
      • @Date:2022/5/13 *
      • 方法引用测试(练习) */ public class MethodRefTest {
    1. /**
    2. * 情况一:
    3. * 对象::实例方法
    4. */
    5. @Test
    6. void test01() {
    7. // Lambda表达式
    8. Consumer<String> a = (name) -> System.out.println(name);
    9. a.accept("北京");
    10. // 方法引用
    11. PrintStream out = System.out;
    12. // out实例调用他的方法 实现了Consumer接口的方法体
    13. Consumer<String> b = out::println;
    14. b.accept("南京");
    15. }
    16. /**
    17. * 情况二
    18. * 类::静态方法
    19. */
    20. @Test
    21. void test02() {
    22. // lambda表达式
    23. Comparator<Integer> c1 = (num1,num2) -> Integer.compare(num1,num2);
    24. int compare = c1.compare(55, 66);
    25. System.out.println(compare);
    26. System.out.println("****************");
    27. // 方法引用
    28. Comparator<Integer> s1 = Integer::compare;
    29. int compare1 = s1.compare(66, 55);
    30. System.out.println(compare1);
    31. }
    32. /**
    33. * 情况三
    34. * 类::实例方法
    35. * 方法存在两个参数 其中一个参数作为调用者时 可以使用方法引用 类::实例方法
    36. */
    37. @Test
    38. void test03() {
    39. // lambda表达式
    40. Comparator<String> s1 = (str1, str2) -> str1.compareTo(str2);
    41. int compare1 = s1.compare("a", "B");
    42. System.out.println(compare1);
    43. // 方法引用 类::实例方法
    44. Comparator<String> s2 = String::compareTo;
    45. int compare2 = s2.compare("B", "a");
    46. System.out.println(compare2);
    47. }

    }

    ```