Lambda(中)常规应用

2020-12-09  本文已影响0人  _River_

parm —> overrideMethod 是一个整体

匿名内部类
        Comparator<Apple> appleWeight = new Comparator<Apple>() {
            public int compare(Apple a1, Apple a2){
                 Integer diffWeight = a1.getWeight().compareTo(a2.getWeight());
                 return diffWeight;
            }
        };
        
Lambda表达式
    Comparator<Apple> appleWeight =
    (Apple a1, Apple a2) -> {
    Integer diffWeight = a1.getWeight().compareTo(a2.getWeight());
    return diffWeight;
   }
    
说明:
    1:Comparator里面有且仅有compare的抽象方法,因此可以使用Lambda式 
    2:参数       放在括号里面  —>  左边的括号   
    3:重写方法  放在            —>  指向的地方

Lambda可省略的部分:
    1:入参的类型
    2:方法体的大括号  以及  Return
    

    public class OmitLambda {    
    
        public static void main(String[] args) {       
            //请在此使用Lambda【标准格式】
            //调用invokeCalc方法来计算120+130的结果        
             invokeCalc(120, 130, (Integer a, Integer b) -> {  return a + b;  });        
       
            //省略写法       
             invokeCalc(120, 130, (a, b) -> a + b); 
        }   
        
        private static void invokeCalc(Integer a, Integer b, Calculator calculator) {        
            Integer result = calculator.calc(a, b);        
             System.out.println("结果是:" + result);    
        }
  }

   //函数式接口注解 一旦使用该注解 在进行编译时会进行检查  
        @FunctionalInterfacepublic 
        interface Calculator {    
            Integer calc(Integer a, Integer b);
            }
            
         由于Calculator里面有且仅有一个抽象方法,
         那么(a,b)会直接对应   calculator这个对象    的唯一抽象方法的入参       
         同时  a+b    直接作为      calculator这个对象   的重写方法


    public class MethedIntroductionLambda {    
    
        public static void main(String[] args) {   
        
        //匿名内部写法
        printString(new Printable() {    
        @Override    
        public void print(String str) {       
             System.out.println(str);   
            }
        });

        // str作为接口里面唯一抽象方法的data.print的入参        
        // System.out.println(str)作为里面唯一抽象方法的data.print的代码块            
        
        //        显示入参类型
        printString((String str) -> System.out.println(str));
        //        隐藏入参类型
        printString(str -> System.out.println(str));  
        //        方法里面的str去哪里了
        printString(str-> System.out.println());
        
        
        //方法引用//方法只管调用 Printable 接口的 print 方法,
        //而并不管 print 方法的具体实现逻辑会将字符串 打印到什么地方去
        //注意System.out 代表这该类(若有继承关系可以用super调用父类 若调用本类可用this)
        printString(System.out::println);
       }
       
        private static void printString(Printable printable) {                       
            printable.print("Hello, World!");   
       }          
   
}

        @FunctionalInterface
         public interface Printable {  
             void print(String str);
    }
    
    str作为printable这个对象  的唯一抽象方法的入参
    System.out.println(str) 作为printable这个对象 的重写方法变成
    printable.print(String str){
        System.out.println(str)
    }
    
   print("Hello, World!")中的"Hello, World!"    作为参数传入

上一篇下一篇

猜你喜欢

热点阅读