Java8新特性——1.1,为什么使用Lambda表达式和StreamAPI

Java8新特性——1.1,为什么使用Lambda表达式和StreamAPI_第1张图片

1,Lambda简介

为了节俭没必要的步骤,我就以截图来省略部分打字,
Java8新特性——1.1,为什么使用Lambda表达式和StreamAPI_第2张图片
直接看文字可能没有直接看代码号,请参考一下代码做个简单的了解

2,简单了解Lambda表达式

首先看一下一个简单的 匿名内部类

@Test
public void test1() {
	
	Comparator comparator = new Comparator() {
		
		//原来的匿名内部类
		@Override
		public int compare(Integer o1, Integer o2) {//比较两个Integer大小
			return Integer.compare(o1, o2);
		}
	};
	TreeSet ts = new TreeSet<>(comparator);//匿名内部类的实例作为参数传递
}

而此段代码最重要的也就只有return的这一行代码
而用Lambda表达式这可以这样写:

//lambda表达式
@Test
public void test2() {
	Comparator comparator = (x,y) -> Integer.compare(x, y);
	TreeSet ts = new TreeSet<>(comparator);
}

这就由原来的4行代码简约成1行,看起来也比较简洁,
这样一个小例子可能说服不了大家,具体请看下面更完整的代码演示。

3,需求演示,比较出Lambda表达式的简洁性

我们做一个需求:
此段代码之前创建员工对象Employee,给出几个参数,构建有参构造,无参构造,
这些都是可以快捷键生成的,具体参考代码请点击此处:点我,我有完整示例代码,快来!!!

List employees = Arrays.asList(//先创建一个集合来存放员工信息
		new Employee("张三", 11, 11111),
		new Employee("李四", 22, 2222),
		new Employee("王二", 33, 3333),
		new Employee("麻子", 44, 4444)
		);

//需求:获取当前公司年龄大于35的员工信息
@Test//调用试试
public void test3() {
	List list = filterEmployee(employees);
	for (Employee employee : list) {
		System.out.println(employee);
	}
}
	//提取数据,
public List filterEmployee(Listlist){
	List emps = new ArrayList<>();
	for (Employee emp : list) {
		if (emp.getAge() >=33) {
			emps.add(emp);
		}
	}
	return emps;
}

//以上代码方式完成的只是一个需求,若是完成多个需求可能会出现大量代码样式重复,
//优化方案:设计模式,匿名内部类,lambda表达式,streamAPI,完整代码请点击上面链接,

//优化方式1,策略设计模式
//此方法需求多了,可能会创建大量的类,
@Test
public void test4() {
	List list = filterEmployee(employees,new FilterEmployeeByAge());
	for (Employee employee : list) {
		System.out.println(employee);
	}
	System.out.println("---------------------");
	
	List list2 = filterEmployee(employees,new FilterEmployeeBySalary());
	for (Employee employee : list2) {
		System.out.println(employee);
	}
}

public List filterEmployee(List list, Mypredicate mp){
	List emps = new ArrayList<>();
	for (Employee employee : list) {
		if (mp.test(employee)) {
			emps.add(employee);
		}
	}
	return emps;
}

//优化方式二,匿名内部类
@Test
public void test5() {
	List list = filterEmployee(employees,new Mypredicate() {
		
		@Override
		public boolean test(Employee t) {
			return t.getSalary()<=3333;
		}
	});
	for (Employee employee : list) {
		System.out.println(employee);
	}
	
}

给出Lambda表达式和StreamAPI实现方式
(大家可能看的没有一个很清晰的差别,因为代码多了可能会消磨人对空闲时间的利用率)

//优化方式3,Lambda表达式
@Test
public void test6() {
	List list = filterEmployee(employees,(e) ->e.getSalary()>=3333);
	list.forEach(System.out::println);
}

//优化方式4,StreamAPI
@Test
public void test7() {
	employees.stream()
	.filter((e) -> e.getSalary()>=3333)//获取薪资大于等于3333的
	.limit(2)//猎取前两行
	.forEach(System.out::println);
	
	System.out.println("-----------------------");
	
	employees.stream()
	.map(Employee::getName)//获取员工名字
	.forEach(System.out::println);
}

所以具体解释请看完整代码:
点我,我有完整示例代码,快来!!!

你可能感兴趣的:(#,Java8新特性)