jdk1.8-lambda

lambda表达式;
1.可将原有的匿名内部类替换为命名内部类;
2.当方法的参数为接口类型时,可在调用方法时,用lambda表达式实现这个接口;
3.语法:参数列表 -> 单条执行语句/执行块;

4.被lambda表达的接口,只能有一个方法;
优点:
让代码实现起来更加简洁,从而显著提升开发效率
缺点:
代码会变得相对不易阅读;

下面直接上代码:

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."msg"为传入HandlerArg接口的handleEntry方法所需参数,在"->前面";而后面 直接执行方法所要做的事;
		//2.参数可不声明参数类型;
		//3.单个参数不需要被"()"包围起来;
		//lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> System.out.println(msg));

		//二、
		//也可以预先实现接口,再将接口作为参数传递
		//HandlerArg handlerArg = msg -> System.out.println(msg);
		//lambdaTest.exeEntry("the hardest thing is to feel good everyday",handlerArg);

		//三、
		//多条语句,则直接作为一个函数来使用,其实这里就类似于javaScript的方法传递了
		//lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> {

		//	String strPrefix = "chengxp said:";
		//	System.out.println(strPrefix + msg);
		//});

		//四、
		//多个参数,并处理后返回结果
//		int strsLength = lambdaTest.exeEntry("sdf5745","fgdg", (msg1,msg2) -> {return msg1.length() + msg2.length();});
//		System.out.println("两个字符串长度之和为:" + strsLength);

		//五、
		//例如集合框架中用的比较多的排序,可以这么写
		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));
	}
}

为突出效果,使之更加便于理解,请分别运行代码。

 

 

转载于:https://my.oschina.net/u/4122740/blog/3072782

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值