jdk1.8-lambda

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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息