JDK8新特性快速入門之lambda表達式

JDK8新特性快速入門之lambda表達式

JDK8新特性:

​ 1、速度更快(JVM空間、數據結構的變化)、

​ 2、代碼更少(Lambda表達式使得代碼更加簡潔化)、

​ 3、強大的Stream API、便於並行、最大化減少空指針異常 Optional容器類

廢話少說,往下看代碼演示

​ 需求:根據員工的 工資/年齡 來選擇輸出員工信息

//創建一個員工類
public class Employee {
private String name;
private int age;
private double sarlary;
    
public Employee() {
	super();
}

public Employee(String name, int age, double sarlary) {
	super();
	this.name = name;
	this.age = age;
	this.sarlary = sarlary;
}
// 這裏省略所有的get and set的封裝 ~~~
}

//根據需求寫業務代碼
public class Lambda01 {
	//創建一個列表,往裏邊添加內容
    List<Employee> emplpoyees = Arrays.asList(
			new Employee("張三",23,888.88),
			new Employee("張四",33,988.88),
			new Employee("張吳",43,9988.88),
			new Employee("張六",53,8998.88)
			);
  	//根據年齡判斷
	public List<Employee> filterEmpByAge(List<Employee> list){
		List<Employee> emps = new ArrayList<>();
		for (Employee employee : list) {
			if(employee.getAge()>=35) {
				emps.add(employee);
			}
		}
		
		return emps; 
	}
    
    	//測試一個員工的年齡大於35歲的方法
	@Test
	public void test1() {
		List<Employee> filterEmp = filterEmpByAge(emplpoyees);
		for (Employee employee : filterEmp) {
			System.out.println(employee);
		}
	}
	/**
	 * test1()測試輸入結果:
            Employee [name=張吳, age=43, sarlary=9988.88]
            Employee [name=張六, age=53, sarlary=8998.88]
	 */
	
      
  //優化一:策略設計模式
    //第一步:創建一個接口:
    public interface MyPredicate<T> {
	public boolean test(T t);
	}
    //第二步:創建一個根據年齡判斷員工的實現類:
	public class FiltyerByAge implements MyPredicate<Employee>{  
	@Override
	public boolean test(Employee t) {
		// TODO Auto-generated method stub
		return t.getAge()>=35;
	}
	}

    //第三步:編寫策略方法
	public List<Employee> filterEmpee(List<Employee> list, MyPredicate<Employee> mp){
		List<Employee> emps = new ArrayList<>(); 
		for (Employee employee : list) {
			if(mp.test(employee)) emps.add(employee);
		}
		return emps;
	}
    
	//第四步:測試優化一>>>>>>年齡判斷
		@Test
		public void test2() {
		List<Employee> filterEmp = filterEmpee(emplpoyees,new FiltyerByAge());
		for (Employee employee : filterEmp) {
			System.out.println("—————————————優化一根據年齡———————————————:"+employee);
		}
	}
    
    //如果根據工資判斷需要重寫一個工資判斷的實現類,如果還有其他要求仍同樣需要重創建一個實現類(顯然不夠合理)!!     所以需要完善,下邊爲優化二方式----------->"匿名內部類實現"
    
    //第五步:根據工資判斷創建工資類
    public class FilterBySalary implements MyPredicate<Employee>{
	@Override
	public boolean test(Employee t) {
		return t.getSarlary()<=1000;
		}
	}

    //第六步:測試優化一>>>>>>工資判斷
	@Test
    public void test3() {
        List<Employee> filterEmp = filterEmpee(emplpoyees,new FilterBySalary());

        for (Employee employee : filterEmp) {
            System.out.println("—————————————優化一根據工資———————————————:"+employee);
        }
    }
    
    	
 //優化二:匿名內部類
	@Test
	public void test4() {
		List<Employee> filterEmpAge = filterEmpee(emplpoyees,new MyPredicate<Employee>() {
			@Override
			public boolean test(Employee t) {
				return t.getAge()<=40;//使用了匿名內部類之後根據年齡/工資,只需要修改這裏即可(不用再創建太多相關的實現類)
			}
		});
		for (Employee employee : filterEmpAge) {
			System.out.println("—————————————優化二》》匿名內部類———————————————:"+employee);
		}
	}
    
  // 感覺不錯吧,接下來看看lambda表達式寫法------------優化方式三:lambda表達式
    
    //優化三:lambda表達式
	@Test
	public void test5() {//整個邏輯寫下來,代碼非常簡潔(這就是lambda魅力所在)
		List<Employee> filterEmpee = filterEmpee(emplpoyees,(e) -> e.getSarlary() >=5000);
		filterEmpee.forEach(System.out::println);
	}
    
    //下面還有最終優化版本:---------------優化方式四:Stream API
    
   		 @Test
		public void test6() {//這裏什麼方法都沒有調用,單單隻用了stream就對員工進行了判斷!
			emplpoyees.stream().filter((e)->e.getSarlary()   
             >=5000).forEach(System.out::println); 
		}
}

看完之後有沒有很震撼,這裏只是簡單做個JDK8新特性快速入門演示,希望對您有幫助,感謝點贊評論支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章