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新特性快速入門演示,希望對您有幫助,感謝點贊評論支持!