lambda表達式;
1.可將原有的匿名內部類替換爲命名內部類;
2.當方法的參數爲接口類型時,可在調用方法時,用lambda表達式實現這個接口;
3.語法:參數列表 -> 單條執行語句/執行塊;java
4.被lambda表達的接口,只能有一個方法;
優勢:
讓代碼實現起來更加簡潔,從而顯著提高開發效率
缺點:
代碼會變得相對不易閱讀;sql
下面直接上代碼:框架
import java.sql.SQLOutput; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * * @author chengxp * */ public class LambdaTest { /** * lambda呈現入口 */ public void exeEntry(String message,HandlerArg handlerArg){ handlerArg.handleEntry(message); } /** * 聲明一個接口,以lambda的語法來表達該接口的方法調用 */ public interface HandlerArg{ public void handleEntry(String message); } /** * 聲明一個接口,以lambda的語法來表達該接口的方法調用 */ public interface HandlerArgs{ public int handleEntry(String message1,String message2); } /** * lambda呈現入口 * @param handlerArgs */ public int exeEntry(String message1,String message2,HandlerArgs handlerArgs){ return handlerArgs.handleEntry(message1, message2); } public static void main(String[] args) { LambdaTest lambdaTest = new LambdaTest(); //1、 //1."msg"爲傳入HandlerArg接口的handleEntry方法所需參數,在"->前面";然後面 直接執行方法所要作的事; //2.參數可不聲明參數類型; //3.單個參數不須要被"()"包圍起來; //lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> System.out.println(msg)); //2、 //也能夠預先實現接口,再將接口做爲參數傳遞 //HandlerArg handlerArg = msg -> System.out.println(msg); //lambdaTest.exeEntry("the hardest thing is to feel good everyday",handlerArg); //3、 //多條語句,則直接做爲一個函數來使用,其實這裏就相似於javaScript的方法傳遞了 //lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> { // String strPrefix = "chengxp said:"; // System.out.println(strPrefix + msg); //}); //4、 //多個參數,並處理後返回結果 // int strsLength = lambdaTest.exeEntry("sdf5745","fgdg", (msg1,msg2) -> {return msg1.length() + msg2.length();}); // System.out.println("兩個字符串長度之和爲:" + strsLength); //5、 //例如集合框架中用的比較多的排序,能夠這麼寫 List<String> strs = new ArrayList<>(); strs.add("bb"); strs.add("cc"); strs.add("dd"); strs.add("aa"); //之前是這麼寫的 Collections.sort(strs, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); //這裏也是1.8的遍歷語法。不過試了一下,效率沒有普通的for循環效率高。 strs.forEach(str -> System.out.println(str)); //用lambda寫 Collections.sort(strs,(s1,s2) -> s1.compareTo(s2)); strs.forEach(str -> System.out.println(str)); } }
爲突出效果,使之更加便於理解,請分別運行代碼。ide