zoukankan      html  css  js  c++  java
  • 019_JDK8.0新特性<三>函数引用_构造器引用_数组引用

    1. 函数引用 :

    • 若Lambda体中的内容已经有方法实现过了,则可以使用"方法引用"
    • 函数引用可以理解为Lambda表达式的另一种表现形式

    2. 语法格式

    • 注意 : 

      • Lambda体中调用方法的参数列表与返回值类型,须与函数式接口中抽象方法的参数列表和返回值类型一直.
      • 当Lambda参数列表中,第一个参数是实例函数的调用者,而第二个参数是实例函数的形式参数时,可以是用          类名::实例函数名      的形式.
    • 对象名 ::实力函数名

        @Test
        public void test1() {
            //  对象::实例方法名
            //  输出任意内容
            PrintStream ps = System.out ;
            Consumer<String> consumer = (x) ->ps.println(x);
            consumer.accept("业精于勤荒于嬉,行成于思毁于随");
    
            PrintStream ps1 = System.out ;
            Consumer<String> consumer1 = ps1::println ;
            consumer1.accept("马云传:未来的你,一定会感谢今天拼命努力的自己!");
            //  函数接口的泛型在控制数据类型
            Consumer<Integer> consumer2 = System.out::println;
            consumer2.accept(9527);
        }
    • 类名::静态方法名

        @Test
        public void test3() {
            //  类名::静态函数
            //  编写比较器
            Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
    
            Comparator<Integer> comparator1 = Integer::compare ;
    
            int compare = comparator1.compare(120, 120);
            System.out.println("compare = " + compare);
        }
    • 类名::函数名

        @Test
        public void test4() {
            //  类名::函数名
            //  比较两个字符串
            //  方法一 : BiPredicate
            BiPredicate<String,String> biPredicate = (x,y)->x.equals(y) ;
            System.out.println("biPredicate.test("abc","abc") = " + biPredicate.test("abc", "abc"));
            BiPredicate<String,String> biPredicate1 = String :: equals ;
            System.out.println(biPredicate1.test("郭靖","郭靖"));
    
            //  方法二 : BiFunction
            BiFunction<String,String,Boolean> function = (x, y) -> x.equals(y);
            Boolean apply = function.apply("abc", "abc");
            System.out.println("apply = " + apply);
    
            BiFunction<String,String,Boolean> function1 = String::equals ;
            System.out.println("function1.apply("abc","abc") = " + function1.apply("abc", "abc"));
        }
    

    3. 构造器引用

    • 格式 :    classname::new

        @Test
        public void test01() {
            //  构造器引用
            Employee employee = new Employee();
    
            Supplier<Employee> supplier = Employee::new ;
            Employee employee1 = supplier.get();
            System.out.println("employee1 = " + employee1);
            //  一个参数
            Function<String,Employee> function = Employee::new ;
            Employee employee2 = function.apply("xiaoixao");
            System.out.println("employee2 = " + employee2);
            //  二个参数
            BiFunction<String,Integer,Employee> biFunction = Employee::new ;
            Employee employee3 = biFunction.apply("xiaoxiao", 30);
            System.out.println("employee3 = " + employee3);
        }

    4. 数组引用

    • 格式 : 数据类型[]::new

        @Test
        public  void test02() {
            //
            int[] arr = new int[10] ;
    
            Function<Integer,int[]> function = int[]::new ;
            int[] ints = function.apply(10);
            System.out.println("ints = " + ints);
            Function<Integer,Employee[]> function1 = Employee[]::new ;
    
            Employee[] employees = function1.apply(100);
            System.out.println(Arrays.toString(employees));
    
            Function<Object[],String> function2 = employees1->Arrays.toString(employees1);
            String apply = function2.apply(employees);
            System.out.println("apply = " + apply);
        }
    

      

  • 相关阅读:
    [源码解析] PyTorch 流水线并行实现 (4)--前向计算
    [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统
    [源码解析] PyTorch 流水线并行实现 (2)--如何划分模型
    [源码解析] PyTorch 流水线并行实现 (1)--基础知识
    [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练
    [源码解析] 深度学习流水线并行 PipeDream(6)--- 1F1B策略
    [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块
    [源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎
    6.耐心——想象力决定生产力
    5.权利——自由不等于免费
  • 原文地址:https://www.cnblogs.com/xddx/p/13412532.html
Copyright © 2011-2022 走看看