JDK8新特性Lambda表达式的使用与介绍


JDK8——Lambda表达式

开始之前我们先介绍一下“函数式编程”,什么是“函数式编程”,就是把一个方法或者一个函数作为参数传递,这在JDK8之前是做不到的,但是我们也许经常在 javascript 中看到这样的操作,如下:

<script type="text/javascript">
	window.onload = test();
	function test() {
		setInterval(function(){
			console.log("执行匿名函数——" + new Date());
		},1000);
		setInterval(() => {
			console.log("执行箭头函数");
		}, 1000);
	}
</script>

这段JS代码中,第一个setInterval函数会每隔1秒执行参数中传递的匿名函数,第二个setInterval函数同理,这也是ES6中的箭头函数,即马上要学习的Lambda表达式

 

JDK8的Lambda表达式

以比较器为例:

public class TestLambda {

	@Test
	public void testLambda() {
		List<Integer> nums = new ArrayList<>();
		nums.add(8);
		nums.add(3);
		nums.add(5);
		nums.add(1);
		nums.add(7);
		nums.add(6);

		// 传统匿名内部类的方式
		Collections.sort(nums, new Comparator<Integer>() {

			@Override
			public int compare(Integer i1, Integer i2) {
				return i1 - i2;
			}

		});

		System.out.println(nums);

	}
}

传统排序器输出结果:[1, 3, 5, 6, 7, 8]

这里我们使用传统的匿名内部类的方式,传一个排序器对象进去排序。可以看出来我们java的面向对象的思想,实质还是对象的传递。

 

使用Lambda表达式改造上面的代码

public class TestLambda {

	@Test
	public void testLambda() {
		List<Integer> nums = new ArrayList<>();
		nums.add(8);
		nums.add(3);
		nums.add(5);
		nums.add(1);
		nums.add(7);
		nums.add(6);

		// Lambda表达式书写比较器
		Collections.sort(nums, (i1,i2)->{ return i1-i2; });

		System.out.println(nums);

	}
}

Lambda表达式书写排序器输出结果:[1, 3, 5, 6, 7, 8]

Lambda表达式只能表示函数接口函数接口就是只有一个方法的接口,例如Runnable接口,Comparator接口等。

Lambda表达式语法

如:(i1,i2)->{ return i1-i2; }

( )开头,( )中写函数接口的方法形参名,然后写 -> 箭头符 ,最后一个{ },{ }中写代码块

注意:如果函数接口中的方法有参数,并且参数类型不是泛型,那么()中直接写参数名,

            如果函数接口中的方法参数类型是泛型,那么()中需要指明类型,如(Integer i)

猜你喜欢

转载自blog.csdn.net/qq1010830256/article/details/84965825