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

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息