Java进阶总结-Lambda表达式

本文总结了Java8引入的Lambda表达式的概念和用法。Lambda表达式是一种匿名函数,旨在简化代码,可以理解为可传递的代码。它通过箭头操作符(->)分隔参数列表和执行代码。Lambda适用于实现只有一个方法的接口,但需接口为函数接口。使用Lambda时,参数类型可由JVM自动推断,单个参数的小括号可省略,参数名可自定义。在方法体仅包含一句代码的情况下,大括号和return可选。
摘要由CSDN通过智能技术生成

Lambda表达式

Java8之后出来的新功能

是一个匿名函数,目的为了使代码更简洁.可以把它理解为一种传递的代码;

在学习Lambda表达式之前,我们先认识一个新的操作符: -> (可以称作箭头操作符)

以箭头操作符为分割: 代码整体可以看做

左侧: Lambda表达式参数列表

右侧:Lambda表达式中所需要执行的代码;即 Lambda体

可用于场景: 有一个接口,然后写匿名内部类来实现接口,再使用Lambda表达式来简化;

但是需要条件支持: 接口需要函数接口@FunctionInterface的支持(即 此接口只能有一个方法,如果有多个方法,Java中Lambda表达式不知道去找哪个方法,避免混淆);


//第一种:无参,无返回值Lambda表达式展示效果
public class TestLambda {
	public static void main(String[] args) {
		Runnable r = new Runnable() {
			@Override
			public void run() {
				System.out.println("匿名内部类实现效果");
			}
		};
		r.run();
		System.out.println("---------------------");
		Runnable r2 = ()->System.out.println("Lambda表达式实现效果");//用于接口方法是无参的,所以->左侧的参数列表只需要写一个小括号即可;右侧就是方法体;
		r2.run();
	}
}
//输出效果
匿名内部类实现效果
---------------------
Lambda表达式实现效果
//第二种:一个参数,无返回值Lambda表达式;
public class Test2 {

	public static void main(String[] args) {
		Consumer<String> con = new Consumer<String>() {
			public void accept(String t) {
				System.out.println(t+"实现效果");
			}
		};
		con.accept("匿名内部类");
		System.out.println("---------------------------");
		Consumer<String> con2 = x -> System.out.println(x+"实现效果");//用于方法需要一个参数,所以箭头左侧给一个参数名即可,名字可自定义,并且若只有一个参数的话,小括号可以省略不写
		con2.accept("Lambda表达式");
	}
}
//第三种:有两个以上的参数,有返回值,并且Lambda体中有多条语句;
public class Test3 {
	public static void main(String[] args) {
		Comparator<Integer> c = new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				System.out.println("匿名内部类实现");
				return Integer.compare(o1, o2);
			}
		};
		
		Comparator<Integer> c2 = (x,y)->{//箭头左侧参数列表可以不指定参数类型,因为JVM可以推断出数据类型,如果要写必须每个参数都要写上参数类型;箭头右侧方法体有多条语句时大括号和return不可省略
			System.out.println("Lambda表达式");
			return Integer.compare(x, y);
		};
	}
}

//补充:数据推断;
//例如:
List<String> list = new ArrayList<>();//这里后面的<>里面没有指定泛型但是也不会报错就是JVM的数据推断;
//第四种:若Lambda表达式方法体中只有一条语句,那么return和大括号都可以省略
Comparator<Integer> c2 = (x,y)->Integer.compare(x, y);//同上一个例子,但是方法体中只有一条语句

总结:主要以->两侧看做两个部分

左侧部分:

1:参数类型可以不写,JVM会自动推断;

2.参数只有一个的时候,小括号可以省略;

3.参数名字可以自定义

右侧部分:

1.当方法体中只有一句代码时,大括号可以省略;

2.当方法体中只有一句代码,并且有返回值时,return和大括号都可以省略;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值