Java8新特性———1.1.1,Lambda表达式简洁性,具体代码参考

1,先创建员工对象Employee

package com.atTest.java8;
public class Employee {
private String name;
private int age;
private double salary;
public Employee() {
	super();
}
public Employee(String name, int age, double salary) {
	super();
	this.name = name;
	this.age = age;
	this.salary = salary;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public double getSalary() {
	return salary;
}
public void setSalary(double salary) {
	this.salary = salary;
}
@Override
public String toString() {
	return "Employee [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}

}

2,测试,优化 全部代码演示

package com.atTest.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class TestLambda {
	@Test
	public void test1() {
	
	Comparator comparator = new Comparator() {
		
		//原来的匿名内部类
		@Override
		public int compare(Integer o1, Integer o2) {

			return Integer.compare(o1, o2);
			
		}
	};
	TreeSet ts = new TreeSet<>(comparator);
}

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

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;
}

//优化方式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);
	}
	
}

//优化方式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)
	.limit(2)
	.forEach(System.out::println);
	
	System.out.println("-----------------------");
	
	employees.stream()
	.map(Employee::getName)
	.forEach(System.out::println);
}
}

3,创建一个带泛型的接口,

接口声明一个方法,供其他类调用
package com.atTest.java8;

public interface Mypredicate {

public boolean test(T t);
}

4,优化方式1设计模式的两个类,

package com.atTest.java8;

public class FilterEmployeeByAge implements Mypredicate{
@Override
public boolean test(Employee t) {
	return t.getAge() >=33;
}

}

package com.atTest.java8;

public class FilterEmployeeBySalary implements Mypredicate {

@Override

public boolean test(Employee t) {
	
	return t.getSalary() >=3333;
}

}

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