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); }

浙公网安备 33010602011771号