Lambda表达式

public interface Cook {
    void cook();
}
  public static void main(String[] args) {
        //使用内部类的方式:
        invokeCook(new Cook() {
            @Override
            public void cook() {
                System.out.println("The cooker begin cooking");                
            }
        });
        
        //使用Lambda 表达式:
        invokeCook(()->{
            System.out.println("Using Lambda Expression!");
        });        
        //优化的Lambda:        
        invokeCook(()->System.out.println("Simplized Lambda Expression"));        
  }
public static void invokeCook(Cook cook) { cook.cook(); }
public interface Calculator {
    int calc(int a,int b);
}
    public static void main(String[] args) {
        //使用内部类实现
         invokeCalc(2,3,new Calculator() {
            @Override
            public int calc(int a, int b) {
                return a+b;
            }
        });
        
        //使用Lambda 表达式
         invokeCalc(20,30,(int a,int b)->{
             return a+b;
         });
         
         //简化的Lambda表达式
         invokeCalc(200,300,(a,b)->a+b);

    }    
    public static void invokeCalc(int a,int b,Calculator cal) {
        int value =  cal.calc(a, b);
        System.out.println(value);
    }

 函数式接口作为返回值的示例:

import java.util.Arrays;
import java.util.Comparator;

public class TestReturnFunctionInterface {
    
    public static Comparator<String> getComparator(){
        //匿名内部类
//        return new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return o2.length()-o1.length();
//            }
//            
//        };
        //Lambda表达式
//        return (String o1,String o2)->{return o2.length()-o1.length();};    
        
        //简化的Lambda        
        return (o1,o2)->o2.length()-o1.length();    
    }

    public static void main(String[] args) {
        String[] arr = new String[] {"aa","b","ccc","ddddd"};
        System.out.println("排序前:"+ Arrays.toString(arr));
        Arrays.sort(arr, getComparator());
        System.out.println("排序后:"+Arrays.toString(arr));

    }

}

 方法引用:

可以用方法引用来优化Lambda表达式:

public class FirstDemo {

    public static void main(String[] args) {
        //Lambda 表达式
        printString((str)->System.out.println(str));
        //方法引用
        printString(System.out::println);
  
    }
    public static void printString(Printable p) {
        p.print("Hello World");
    }

}
@FunctionalInterface
interface Printable{
    void print(String str);
}

 

posted @ 2020-11-10 17:08  Joyce502  阅读(104)  评论(0)    收藏  举报