您当前的位置: 首页 > 

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

jdk1.8新特性——方法引用、构造器引用及数组引用详解

小志的博客 发布时间:2021-08-26 21:59:18 ,浏览量:0

目录
    • 一、方法引用
      • 1、方法引用的理解
      • 2、方法引用的基本语法
      • 3、方法引用的注意事项
    • 二、方法引用的示例
      • 1、方法引用语法 (对象的引用 :: 实例方法名)
      • 2、方法引用语法 (类名 :: 静态方法名)
      • 3、方法引用语法 (类名 :: 实例方法名)
    • 三、构造器引用
      • 1、构造器引用的理解
      • 2、构造器引用的基本语法(类名 :: new)
      • 3、构造器引用的注意事项
    • 四、构造器引用的示例
    • 五、数组引用
      • 1、数组引用的基本语法(类型[] :: new)
      • 2、数组引用的示例

一、方法引用 1、方法引用的理解
  • 如果 Lambda 体中的功能,已经有方法提供了实现,可以使用方法引用。可以将方法引用理解为 Lambda 表达式的另外一种表现形式。
2、方法引用的基本语法
  • 对象的引用 :: 实例方法名
  • 类名 :: 静态方法名
  • 类名 :: 实例方法名
3、方法引用的注意事项
  • 方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致。
  • 如果Lambda 的参数列表的第一个参数,是实例方法的调用者,且Lambda 的参数列表的第二个参数(或无参)是实例方法的参数时,使用ClassName::MethodName格式。
二、方法引用的示例 1、方法引用语法 (对象的引用 :: 实例方法名)
  • 示例代码如下:

    package com.xz.springboot_java8.day5;
    import java.io.PrintStream;
    import java.util.function.Consumer;
    /**
     * @description: 方法引用语法 (对象的引用 :: 实例方法名)
     * @author: xz
     */
    public class Test1 {
        public static void main(String[] args) {
            System.out.println("=========Lambda表达式写法如下=============");
            Consumer con =(x)-> System.out.println(x);
            con.accept("Lambda表达式写法!");
    
            //优化方式一 对象的引用::实例方法名 的格式
            System.out.println("-------------方法引用写法如下--------------");
            PrintStream printStream=System.out;
            Consumer con1 =printStream::println;
            con1.accept("方法引用写法(对象的引用::实例方法名)的语法格式");
    
            //优化方式二 对象的引用::实例方法名 的格式
            System.out.println("++++++++++++++++方法引用写法如下++++++++++++");
            Consumer con2 =System.out::println;
            con2.accept("方法引用写法(对象的引用::实例方法名)的语法格式");
        }
    }
    
  • 输出结果如下: 在这里插入图片描述

  • 方法引用的注意事项:方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致。 在这里插入图片描述

2、方法引用语法 (类名 :: 静态方法名)
  • 示例代码如下:

    package com.xz.springboot_java8.day5;
    import java.util.Comparator;
    /**
     * @description: 方法引用语法 (类名 :: 静态方法名)
     * @author: xz
     */
    public class Test2 {
        public static void main(String[] args) {
            System.out.println("=========Lambda表达式写法如下=============");
            Comparator comparable=(x, y)->Integer.compare(x,y);
            int result=comparable.compare(20,8);
            System.out.println(result);
    
            //优化方式 类名::静态方法名 的格式
            System.out.println("-------------方法引用写法如下--------------");
            Comparator comparable1=Integer::compare;
            int result1=comparable.compare(20,8);
            System.out.println(result1);
    
        }
    }
    
  • 输出结果如下:

    在这里插入图片描述

  • 方法引用的注意事项:方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致。 在这里插入图片描述 在这里插入图片描述

3、方法引用语法 (类名 :: 实例方法名)
  • 示例代码如下:

    package com.xz.springboot_java8.day5;
    import java.util.function.BiPredicate;
    /**
     * @description: 方法引用语法 (类名 :: 实例方法名)
     *               若Lambda 的参数列表的第一个参数,是实例方法的调用者,
     *               且Lambda 的参数列表的第二个参数(或无参)是实例方法的参数时,
     *               格式: ClassName::MethodName
     * @author: xz
     */
    public class Test3 {
        public static void main(String[] args) {
            System.out.println("=========Lambda表达式写法如下=============");
            BiPredicate biPredicate=(x,y)->x.equals(y);
            boolean flag=biPredicate.test("xz","xz");
            System.out.println(flag);
    
            //优化方式 类名 :: 实例方法名 的格式
            System.out.println("-------------方法引用写法如下--------------");
            BiPredicate biPredicate1=String::equals;
            boolean flag1=biPredicate.test("xz","xz");
            System.out.println(flag);
        }
    }
    
  • 输出结果如下: 在这里插入图片描述

  • 方法引用的注意事项1:方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致。

    在这里插入图片描述 在这里插入图片描述

  • 方法引用的注意事项2:如果Lambda 的参数列表的第一个参数,是实例方法的调用者,且Lambda 的参数列表的第二个参数(或无参)是实例方法的参数时,使用ClassName::MethodName格式。 在这里插入图片描述

三、构造器引用 1、构造器引用的理解
  • 与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法。
2、构造器引用的基本语法(类名 :: new)
  • 类名 :: new
3、构造器引用的注意事项
  • 构造器的参数列表,需要与函数式接口中参数列表保持一致。
四、构造器引用的示例
  • 示例代码如下:

    package com.xz.springboot_java8.day5;
    import com.xz.springboot_java8.day5.entity.Employee;
    
    import java.util.function.BiFunction;
    import java.util.function.Function;
    
    /**
     * @description: 构造器引用  (类名 :: new)
     * @author: xz
     */
    public class Test4 {
        public static void main(String[] args) {
            System.out.println("=========Lambda表达式写法如下(构造器传1个参数)=============");
            Function fun=(x)->new Employee(x);
            Employee emp=fun.apply(20);
            System.out.println(emp);
    
            System.out.println("-------------构造器引用写法如下(构造器传1个参数)--------------");
            Function fun1=Employee::new;
            Employee emp1=fun1.apply(20);
            System.out.println(emp1);
    
            System.out.println("=========Lambda表达式写法如下(构造器传2个参数)=============");
            BiFunction biFunction=(x,y)->new Employee(x,y);
            Employee emp2=biFunction.apply(1,"张三");
            System.out.println(emp2);
    
            System.out.println("-------------构造器引用写法如下(构造器传2个参数)--------------");
            BiFunction biFunction1 = Employee::new;
            Employee emp3 = biFunction1.apply(1, "张三");
            System.out.println(emp3);
    
        }
    }
    
  • 输出结果如下: 在这里插入图片描述

  • 构造器引用的注意事项:构造器的参数列表,需要与函数式接口中参数列表保持一致。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    在这里插入图片描述

五、数组引用 1、数组引用的基本语法(类型[] :: new)
  • 类型[] :: new
2、数组引用的示例
  • 示例代码如下:

    package com.xz.springboot_java8.day5;
    import java.util.function.Function;
    /**
     * @description: 数组引用 (类型[] :: new)
     * @author: xz
     */
    public class Test5 {
        public static void main(String[] args) {
            System.out.println("=========Lambda表达式写法如下=============");
            Function fun = (x) -> new String[x];
            String[] str = fun.apply(5);
            System.out.println(str.length);
    
            System.out.println("-------------构造器引用写法如下--------------");
            Function fun1 = String[]:: new;
            String[] str1 = fun.apply(10);
            System.out.println(str1.length);
    
        }
    }
    
  • 输出结果如下: 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.2608s