Lambda表达式详细解答

本文介绍了Lambda表达式的基础概念,展示了其简洁性和灵活性,并通过多个示例对比了使用Lambda表达式和传统匿名类的方式。此外,文章还解释了Lambda表达式适用的场景,即函数式接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章:到底什么是Lambda表达式,这个东东怎么用?用在哪里合适?

Lamdba表达式是什么?怎么用?

Lambda的理解:简洁地表示可传递的匿名函数的一种方式,它没有名称,但包含参数列表,函数的主体,返回类型,可能还包含一个可以抛出异常的列表。

Lambda表达式可以作为参数传递给方法或存储在变量中;

举个例子:

	Comparator<Apple> byWeight = (Apple a1,Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

利用Lambda表达式的情况下,直接赋给变量byWeight。

如果不使用Lambda表达式该怎么写?下面的代码可能更符合没有接触过java8的童鞋的口味。

        Comparator<Apple> byWeight = new Comparator<Apple>() {
            public int compare(Apple a1,Apple a2) {
                return a1.getWeight().compareTo(a2.getWeight());
            };
        }

相比之下:Lambda表达式写的代码,更清晰,更灵活。

上边的Lambda表达式有三个部分:参数列表、箭头、Lambda主体。

为了进一步说明,下面我们再给出若干个Lambda表达式的例子。

1、(String s) -> s.length()
2、(Apple a) -> a.getWeight() >150

3、(int x, int y) -> {

 System.out.printl("return:");
 System.out.printl(x+y);

} 

注意:表达式后面是不需要“ ; ”号的, 当然 { }内部的表达式是需要的。

到底在哪里可以使用Lambda表达式?

答案:你可以在函数式表达式接口上使用Lambda表达式。

那么什么是函数式表达式接口?

简而言之,只定义一个抽象方法的接口。举个栗子:

	//java.util.Comparator
	public interface Comparator<T> {
		int compare(T o1,T o2);
	}
	
	//java.lang.Runnable
	public interface Runnable {
		void run();
	}

Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。

	Runnable r1 = () -> System.out.println("Hello world !");    //使用Lambda表达式
        //使用匿名类			
	Runnable r2 = new Runnable() {
		public void run() {
			System.out.println("hello world 2");
		}
	};

要点总结:

1、Lambda表达式可以理解为一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出异常的列表;

2、Lambda让你可以简洁地传递代码;

3、函数式接口就是仅仅声明一个抽象方法的接口;

4、只有在接受函数式接口的地方才能使用Lambda表达式;

5、Lambda表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式接口的一个实例。


继续更新中..........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值