zoukankan      html  css  js  c++  java
  • Java中的Lambda匿名函数后续

    函数式编程(函数式接口):一个接口只包含一个方法实现

    public interface Lambda{
        void method();
    }
    
    // 调用
    
    Lambda lambda = new Lambda(){
        
    };
    
    Lambda lambda1 = () - >{
        
    };
    
    Lambda lambda2 = () ->xxx;
    
    Function接口,一个参数对应一个返回值
    Supplier 一个输出
    Consumer一个输入
    BiFuction 两个输入一个输出
    BiConsumer 两个输入

    方法引用

    • 静态方法引用

      类名::staticMethod, lambda:(args) ——>类名.staticMethod(args);

    • 实例方法引用

      实例::实例方法,lambda:(args)——>实例.实例方法(args);

    • 对象方法引用

      类名::实例方法,lambda:(实例, args) ---> 实例.实例方法(args); 第一个参数类型必须为实例方法对应的类

    • 构造方法引用

      类名::new,lambda:(args) ---->new 类名(args);

    package Lambda;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.function.BiFunction;
    import java.util.function.Consumer;
    import java.util.function.Supplier;
    
    public class Test {
        public Test(){
            System.out.println("create");
        }
        public static void main(String[] args) {
    //        final Lambda lambda = Test::method1;
    //        lambda.method(1);
    
    //        List<Lambda> lambdas = new ArrayList<Lambda>();
    //        for (int i = 0; i < 10; i++) {
    //            lambdas.add(Test::method1);
    //        }
    //
    //        for (int i = 0; i < 10; i++) {
    //            lambdas.get(i).method(i);
    //        }
    //        Lambda lambda = new Test()::method;
    //        lambda.method();
    //        Lambda lambda = ()->new Test().method();
    //        lambda.method();
    //        Lambda lambda = Test::new;
    //        lambda.method();
    //        Lambda lambda = ()->new Test();
    //        lambda.method();
            // 静态方法
            Lambda lambda = Test::method1;
            Lambda lambda4 = () -> Test.method1();
            // 实例方法
            Lambda lambda1 = new Test()::method;
            Lambda lambda5 = ()-> new Test().method();
            // 对象方法,要求前面接口的泛型类型需要实例方法的类类型一直
    //        Lambda lambda2 = Test::method;
            Consumer<Test> consumer0 = (s) -> new Test().method1("hhhh");
            Consumer<Test> consumer =Test::method;
            // 构造方法
            Lambda lambda3 = Test::new;
            Lambda lambda7 = ()->new Test();
        }
    
        void method(){
            System.out.println("method");
        }
    
        static void method1(String s){
            System.out.println(s);
        }
    }
    
    
    高级应用

    用一个集合存放多个方法的引用,用的时候再调用

            List<Lambda> lambdas = new ArrayList<Lambda>();
            for (int i = 0; i < 10; i++) {
                lambdas.add(Test::method1);
            }
      
            for (int i = 0; i < 10; i++) {
                lambdas.get(i).method(i);
            }
    
    函数式编程常用接口
    Consumer<Integer> consumer = (i) -> System.out.println(i);
    consumer.accept(10);
    Supplier<Integer> supplier = () ->100;
    System.out.println(supplier.get());
    Function<String, Integer> function = (str)->str.length();
    System.out.println(function.apply("嗨咯"));
    BiFunction<String, String, Integer> biFunction = (str1, str2)->str1.length()+str2.length();
    System.out.println(biFunction.apply("嗨喽", "学习Java"));
    
    将函数式接口作为参数
    // 定义
    static void method4(int i, Consumer<Integer> consumer){
          consumer.accept(i);
    
      }
    
    static int method5(Supplier<Integer> supplier){
        return supplier.get();
    }
    
    static int method6(String s, Function<String, Integer> function){
        return function.apply(s);
    }
    
    static int method7(String s1, String s2, BiFunction<String, String, Integer> biFunction){
        return biFunction.apply(s1, s2);
    }
    
    // 调用
    Consumer<Integer> consumer = (i) -> System.out.println(i);
    consumer.accept(10);
    Supplier<Integer> supplier = () ->100;
    System.out.println(supplier.get());
    Function<String, Integer> function = (str)->str.length();
    System.out.println(function.apply("嗨咯"));
    BiFunction<String, String, Integer> biFunction = (str1, str2)->str1.length()+str2.length();
    System.out.println(biFunction.apply("嗨喽", "学习Java"));
    
    for (int i = 0; i < 20; i++) {
    method4(i,consumer);
    System.out.println(method5(supplier));
    System.out.println(method6(String.valueOf(i), function));
    System.out.println(method7(String.valueOf(i), String.valueOf(i), biFunction));
    }
    
  • 相关阅读:
    《编写可维护的JavaScript》读书笔记
    第十四天:还是看代码
    第十三天:过了一遍rt_thread,看代码架构
    第十二天:rt_thread系统
    第十一天:要做stm32了
    第十天:没太专注工作
    第九天:rtc问题查找与测试
    第八天:android编译环境搭建
    第七天:终于看到板子了
    第六天和周末:感慨下这周
  • 原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/14408517.html
Copyright © 2011-2022 走看看