码迷,mamicode.com
首页 > 编程语言 > 详细

java8 Limbda表达式的演化demo

时间:2017-11-04 15:07:35      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:sed   需求   red   interface   return   color   class   put   gets   

需求:按年龄或者薪水搜索员工

技术分享
  //原始方式:使用两个方法完成按不同条件搜索
    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);
    }
优化方式三:Lambda表达式 (需要使用我们自定义的MyPredicate 接口)
技术分享
//优化方式四: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);
    }
优化方式四:Stream API (使用java8内置的断言型接口Predicate boolean test(T t);)
技术分享
public interface MyPredicate<T> {
    public boolean test(T t);
}
MyPredicate 接口
技术分享
public class FilterEmplyeeByAge implements MyPredicate<Emplyee> {

    @Override
    public boolean test(Emplyee t) {
        return t.getAge()>35;
    }
}
FilterEmplyeeByAge 按年龄搜索员工实现类
技术分享
public class FilterEmplyesBySalary implements MyPredicate<Emplyee> {
    @Override
    public boolean test(Emplyee t) {
        return t.getSalary()<4000;
    }
}
FilterEmplyesBySalary 按薪水搜索员工实现类

 

java8 Limbda表达式的演化demo

标签:sed   需求   red   interface   return   color   class   put   gets   

原文地址:http://www.cnblogs.com/caohuimingfa/p/7783035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!