java8 Limbda表达式的演化demo
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8 Limbda表达式的演化demo相关的知识,希望对你有一定的参考价值。
需求:按年龄或者薪水搜索员工
//原始方式:使用两个方法完成按不同条件搜索 private static void test1() { List<Emplyee> emplyeeList= Arrays.asList( new Emplyee("夏侯惇",40,4000), new Emplyee("张郃",30,3000), new Emplyee("许褚",50,5000) ); //按年龄搜索 List<Emplyee> list1=filterByAge(emplyeeList); list1.forEach(System.out::println); System.out.println("==--------------=="); //按工资搜索 List<Emplyee> list2=filterBySalary(emplyeeList); list2.forEach(System.out::println); } //按年龄搜索 private static List<Emplyee> filterByAge(List<Emplyee> listInput){ List<Emplyee> listRtn=new ArrayList<>(); for(Emplyee e:listInput){ if(e.getAge()>35){ listRtn.add(e); } } return listRtn; } //按工资搜索 private static List<Emplyee> filterBySalary(List<Emplyee> listInput){ List<Emplyee> listRtn=new ArrayList<>(); for(Emplyee e:listInput){ if(e.getSalary()<4000){ listRtn.add(e); } } return listRtn; }
//优化方式一:策略模式 private void test2() { List<Emplyee> emplyeeList= Arrays.asList( new Emplyee("夏侯惇",40,4000), new Emplyee("张郃",30,3000), new Emplyee("许褚",50,5000) ); //按年龄搜索 List<Emplyee> list1=filterEmplyee(emplyeeList, new FilterEmplyeeByAge()); list1.forEach(System.out::println); System.out.println("==--------------=="); //按工资搜索 List<Emplyee> list2=filterEmplyee(emplyeeList,new FilterEmplyesBySalary()); list2.forEach(System.out::println); } private List<Emplyee> filterEmplyee(List<Emplyee> listInput,MyPredicate<Emplyee> mp){ List<Emplyee> listRtn=new ArrayList<>(); for(Emplyee e:listInput){ if(mp.test(e)){ listRtn.add(e); } } return listRtn; }
//优化方式二:匿名内部类 private void test3(){ List<Emplyee> emplyeeList= Arrays.asList( new Emplyee("夏侯惇",40,4000), new Emplyee("张郃",30,3000), new Emplyee("许褚",50,5000) ); //按年龄搜索 List<Emplyee> list1=filterEmplyee(emplyeeList, new MyPredicate<Emplyee>() { @Override public boolean test(Emplyee t) { return t.getAge()>35 && t.getSalary()>4000; } }); list1.forEach(System.out::println); }
//优化方式三:Lambda表达式 (需要使用我们自定义的MyPredicate<Emplyee> 接口) private void test4(){ List<Emplyee> emplyeeList= Arrays.asList( new Emplyee("夏侯惇",40,4000), new Emplyee("张郃",30,3000), new Emplyee("许褚",50,5000) ); //按年龄盒薪水搜索 List<Emplyee> list1=filterEmplyee(emplyeeList, t->t.getAge()>35 && t.getSalary()>4000); list1.forEach(System.out::println); }
//优化方式四:Stream API (使用java8内置的断言型接口Predicate<T> boolean test(T t);) private void test5(){ List<Emplyee> emplyeeList= Arrays.asList( new Emplyee("夏侯惇",40,4000), new Emplyee("张郃",30,3000), new Emplyee("许褚",50,5000) ); //按年龄和薪水搜索 List<Emplyee> list1=emplyeeList.stream().filter(i->i.getAge()>35 && i.getSalary()>4000).collect(Collectors.toList()); list1.forEach(System.out::println); }
public interface MyPredicate<T> { public boolean test(T t); }
public class FilterEmplyeeByAge implements MyPredicate<Emplyee> { @Override public boolean test(Emplyee t) { return t.getAge()>35; } }
public class FilterEmplyesBySalary implements MyPredicate<Emplyee> { @Override public boolean test(Emplyee t) { return t.getSalary()<4000; } }
以上是关于java8 Limbda表达式的演化demo的主要内容,如果未能解决你的问题,请参考以下文章
15Java常用类(数组工具类Arrays)基本类型包装类(Integer类)正则表达式String的split(String regex)和replaceAll(String regex, (代码片