lambda表达式的使用

lambda表达式的使用

1.四大函数式接口

  1. 举例

    (o1,o2)-> Integer.compare(o1,o2);

  2. 格式:

    -> : lambda表达式 或箭头操作符

    ->左边: 接口中的抽象方法的形参列表

    ->右边:lambda体(就是重写的抽象方法的方法体)

  3. lambda的使用(总结)

    • ->左边:lambda形参列表的参数类型可以省略(类型推断),如果lambda的参数列表只有一个参数,则小括号也可以省略

    • ->右边:lambda体应该使用一对{}包裹;如果lambda体只有一条执行语句(可能是return语句),则{}和return关键字都可以省略

  4. lambda表达式的实质:作为函数式接口的实例

  5. 如果一个接口中,只声明了一个抽象方法,则此接口称为函数式接口

  • 四大函数式接口
image-20211009194218924.png

2.方法引用和构造器引用

image-20211009194440522.png

方法引用

  • 总结: 针对

    1. 类::静态方法 和 对象::实例方法 ===》实现的接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型一致
     *     情况一: 对象::实例方法
     */
     // consumer中的 void accept(T t)
     // PrintStream中的 void println(T t)
     @Test
     public void test01(){
     Consumer consumer=s->System.out.println(s);
     consumer.accept("方法引用调用的打印");
     System.out.println("================");
     Consumer consumer01=System.out::println;
     consumer.accept("方法引用调用的打印");
     }
    
    
     // supplier 中的 T get()
     // Employee中的 String getName()
     @Test
     public void test02(){
     Employee employee = new Employee("tom",23);
     Supplier supplier=()-> employee.getName();
     System.out.println(supplier.get());
     System.out.println("================");
     Supplier supplier1= employee::getName;
     System.out.println(supplier1.get());
     }
    
     /**
     * 情况二: 类 ::静态方法
     *  Comparator   int compare(T o1, T o2);方法
     *  Integer 的   int compare(int x, int y)方法
     */
     @Test
     public void test03(){
     Comparator comparator=(t1,t2)->Integer.compare(t1,t2);
     System.out.println(comparator.compare(11, 12));
     System.out.println("=========");
     Comparator comparator01=Integer::compare;
     System.out.println(comparator01.compare(11, 12));
     }

、、、
2. 针对类::实例方法

     * 情况三: 类::实例方法
     * Comparator中的 int compare(T t1,T t2)
     * String 中的 int t1.compareTo(t2)
     */
     @Test
     public void test04(){
     Comparator comparator=(t1,t2)->Integer.compare(t1,t2);
     System.out.println(comparator.compare(11, 12));
     System.out.println("=========");
     Comparator comparator01=Integer::compareTo;
     System.out.println(comparator01.compare(11, 12));
     }

构造引用

构造引用

/**
 * 构造器引用
 * 函数接口中抽象的方法的参数和对象的构造器的方法的参数一致,返回的是该对象
 */

@Test
public void test05(){
    BiFunction fun01=(t1,t2)->{return new Employee(t1,t2);};
    System.out.println(fun01.apply("hello", 23));
    System.out.println("===============");
    BiFunction fun02=Employee::new;
    System.out.println(fun01.apply("hello", 23));
}

你可能感兴趣的:(lambda表达式的使用)