lambda表达式 拉姆达

lambda表达式 拉姆达

 

学习这个之前,需要明确

有一种接口叫做函数式接口,只允许接口里面只有一个函数

可以使用

@FunctionalInterface进行注解

如果这个接口里面定义了两个方法,就会报错,当然,这种接口主要是针对lambda表达式使用

函数式接口允许:

1.定义默认方法

2.定义静态方法

3.定义Object里的public方法

 

明确了这一点,然后再去学习lambda表达式,下面这个是自己在学习发送邮件的时候,看到的,接口需要自己重新实现prepare方法,因为是一个void方法,传入参数类型是可以不指定的,所以,就可以使用lambda表达式进行接口实例化。

MimeMessagePreparator messagePreparator = mimeMessage -> {

MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);

messageHelper.setFrom(sender,senderName);

messageHelper.setTo(receiver);

messageHelper.setSubject(subject);

messageHelper.setText(message);

};

MimeMessagePreparator mimeMessagePreparator = new MimeMessagePreparator() {

@Override

public void prepare(MimeMessage mimeMessage) throws Exception {

MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);

messageHelper.setFrom(sender,senderName);

messageHelper.setTo(receiver);

messageHelper.setSubject(subject);

messageHelper.setText(message);

}

};

lambda表达式学会以后,确实发现是比较简洁的写法,因为对于接口的实例化变得更加的简洁,而且,最重要的是,其他的问题不大,对于comparable接口的实例化就会更加的清晰

刚写的例子,会少好多行代码

Collections.sort(a,new Comparator<String>() {



    @Override

    public int compare(String o1, String o2) {

        // TODO Auto-generated method stub

        return -1;

    }

});

Collections.sort(a, (o1,o2) -> {return -1;});

然后,只是需要注意一点的是,对于直接实例化,是可以指定

package com.gsy;

public class EmailProperty {
	public static void main(String args[]) {

		new EmailProperty();
	}
	interface qqq{
		int a(int a);
	}
	interface ppp{
		int a(int b);
	}
	class test{
		int a;
		int b;
		int testa(int a,int b,qqq qqq){
			return 1;
		}
		int testa(int a,int b,ppp ppp){
			return 1;
		}
	}
	public EmailProperty() {
		test aaa = new test();
		aaa.a = 1;
		aaa.b = 2;

		aaa.testa(1, 2,new ppp() {
			
			@Override
			public int a(int b) {
				// TODO Auto-generated method stub
				return 0;
			}
		});
		aaa.testa(1, 2,	(qqq) i ->  {return -1;});
	
	}
}

by the way 关于指定lambda表达式实例化是Stack Overflow上外国友人回答的- -,百度百度不到- -

https://stackoverflow.com/questions/55970005/how-to-specify-lambda-expression-in-java-when-i-have-two-same-name-method

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值