java8 Lambda表达式的使用总结

Lambda表达式的使用总结

简介:
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁,更灵活的代码。

案例:
话不多说,直接先看例子:

语法格式一:无参,无返回值

首先我们先在单元测试内写出我们的原始代码:
定义一个Run接口,里面只有一running(无参)方法

interface Run{
	void running();
}

给出初始单元测试,实现Run接口的匿名实现类

	@Test
	public void test01() {
		Run runner=new Run() {
			@Override
			public void running() {
				System.out.println("人类会跑步");
			}
		};
		runner.running();
	}

下面便是lambda表达式的使用(打印结果皆是一致):
使用lambda表达式时可写成:

@Test
	public void test02() {
		Run runner=()->System.out.println("人类会跑步");
		runner.running();
	}

语法格式二:有一参,无返回值

首先是接口:

interface Run{
	void running(String name);
}

匿名实现类:

@Test
	public void test07() {
		Run runner=new Run() {
			@Override
			public void running(String name) {
				System.out.println(name+"能跑步");
			}
		};
		runner.running("小邱");
	}

lambda表达式:

@Test
	public void test08() {
		Run runner=(String name)->System.out.println(name+"能跑步");
		runner.running("小邱");
	}

还可直接将数据类型省略,因为可以由编译器推断得出,称为“类型推断”

@Test
	public void test08() {
		Run runner=(name)->System.out.println(name+"能跑步");
		runner.running("小邱");
	}

只有一个参数时,可省略小括号:

@Test
	public void test09() {
		Run runner=name->System.out.println(name+"能跑步");
		runner.running("小邱");
	}

语法格式三:有两参,无返回值

还是那个接口,在其方法中加入两个参数

interface Run{
	void running(String name,int distance);
}

其原匿名实现类:

@Test
	public void test01() {
		Run runner=new Run() {
			@Override
			public void running(String name,int distance) {
				System.out.println(name+"能跑"+distance+"公里");
			}
		};
		runner.running("小邱",100);
	}

使用lambda表达式:

@Test
	public void test06() {
		Run runner=(String name,int distance)->System.out.println(name+"能跑"+distance+"公里");
		runner.running("小邱",100);
	}

还可直接将数据类型省略,因为可以由编译器推断得出,称为“类型推断”

@Test
	public void test02() {
		Run runner=(name,distance)->System.out.println(name+"能跑"+distance+"公里");
		runner.running("小邱",100);
	}

格式四:有两参,有返回值

这里我们使用java中的Comparator接口来作为例子:
比较传入的两个数的大小

@Test
	public void test03() {
		Comparator<Integer> com1=new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return Integer.compare(o1, o2);
			}
		};
		int compare1=com1.compare(10, 20);
		System.out.println(compare1);
	}

按照格式二中的写法便可以写成:

@Test
	public void test04() {
		Comparator<Integer> com1=(o1,o2)->Integer.compare(o1, o2);
		int compare1=com1.compare(10, 20);
		System.out.println(compare1);
	}

如果用方法引用(调用类中静态方法)的话就可以写成:

@Test
	public void test05() {
		Comparator<Integer> com1=Integer::compare;
		int compare1=com1.compare(10, 20);
		System.out.println(compare1);
	}

格式五:多参,多条语句

匿名实现类:

@Test
	public void test07() {
		Comparator<Integer> com1=new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				System.out.println(o1);
				System.out.println(o2);
				return o1.compareTo(o2);
			}
		};
	}

lambda表达式:

@Test
	public void test08() {
		Comparator<Integer> com1=(o1,o2)->{
			System.out.println(o1);
			System.out.println(o2);
			return o1.compareTo(o2);
		};
	}

总结:

1)举例:(o1,o2)->Integer.compare(o1,o2);
2)格式:
“->”:lambda操作符 或 箭头操作符
"->"左边:lambda形参列表(就是接口中的抽象方法的形参列表)
"->"右边:lambda体(就是重写的抽象方法的方法体)

3)
->左边:lambda形参列表的参数类型可以省略(类型推断):如果lambda形参列表只有一个参数,其小括号也可以省略。
->右边:lambda体应该由一对{}包裹,如果lambda题只有一条执行语句,那么可以省略{}
4)lambda的本质:作为接口的实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值