Expressions Lambda pour un démarrage rapide des nouvelles fonctionnalités de JDK8

Expressions Lambda pour un démarrage rapide des nouvelles fonctionnalités de JDK8

Nouvelles fonctionnalités du JDK8:

1, plus rapide (espace JVM, changements de structure de données),

2. Moins de code (Expression LambdaRendre le code plus concis),

3. PuissantAPI de flux, Pour faciliter le parallélisme, minimisez les exceptions de pointeur nul Optional容器类)

Sans plus tarder, lire le code montre

Demande: en fonction du salaire / de l'âge de l'employé, choisir de sortir les informations sur l'employé

//创建一个员工类
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); 
		}
}

Après l'avoir lu, êtes-vous choqué? Voici juste une démonstration rapide des nouvelles fonctionnalités de JDK8. J'espère que cela vous sera utile. Merci pour votre soutien!

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45496190/article/details/106953855
conseillé
Classement