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<String> consumer=s->System.out.println(s);
     consumer.accept("方法引用调用的打印");
     System.out.println("================");
     Consumer<String> consumer01=System.out::println;
     consumer.accept("方法引用调用的打印");
     }
    
    
     // supplier 中的 T get()
     // Employee中的 String getName()
     @Test
     public void test02(){
     Employee employee = new Employee("tom",23);
     Supplier<String> supplier=()-> employee.getName();
     System.out.println(supplier.get());
     System.out.println("================");
     Supplier<String> 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<Integer> comparator=(t1,t2)->Integer.compare(t1,t2);
     System.out.println(comparator.compare(11, 12));
     System.out.println("=========");
     Comparator<Integer> 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<Integer> comparator=(t1,t2)->Integer.compare(t1,t2);
     System.out.println(comparator.compare(11, 12));
     System.out.println("=========");
     Comparator<Integer> comparator01=Integer::compareTo;
     System.out.println(comparator01.compare(11, 12));
     }

构造引用

构造引用

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

@Test
public void test05(){
    BiFunction<String,Integer,Employee> fun01=(t1,t2)->{return new Employee(t1,t2);};
    System.out.println(fun01.apply("hello", 23));
    System.out.println("===============");
    BiFunction<String,Integer,Employee> fun02=Employee::new;
    System.out.println(fun01.apply("hello", 23));
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容