利用jdk8新特性对代码的优化

public class MyTest {
    //情景:实现list中的元素的过滤,求出集合中age>=30和salary>=300的元素
    List<TestUser> userList = Arrays.asList(
            new TestUser("张三",200.1,20),
            new TestUser("李四",300.2,25),
            new TestUser("王五",400.2,30),
            new TestUser("赵六",500.2,35)
    );
    //传统方法
    @Test
    public void test1(){
        List<TestUser> list = filterUser1(userList);
        for(TestUser user:list){
            System.out.println(user);
        }
        System.out.println("========================");
        List<TestUser> list2 = filterUser2(userList);
        for(TestUser user:list2){
            System.out.println(user);
        }
    }

    public List<TestUser> filterUser1(List<TestUser> userList) {
        List<TestUser> list = new ArrayList<>();
        for (TestUser user : userList) {
            if (user.getAge() >= 30) {
                list.add(user);
            }
        }
        return list;
    }
    public List<TestUser> filterUser2(List<TestUser> userList) {
        List<TestUser>list = new ArrayList<>();
        for (TestUser user : userList) {
            if(user.getSalary()>=300){
                list.add(user);
            }
        }
       return list;
    }
   
//定义一个接口和2个实现类
public interface UserInterfase<T> {
    public boolean test(T t);
}

public class UserByAgeimpl implements UserInterfase<TestUser> {
    @Override
    public boolean test(TestUser user) {
        return user.getAge()>=30;
    }
}

public class UserBySalaryimpl implements UserInterfase<TestUser>{
    @Override
    public boolean test(TestUser user) {
        return user.getSalary()>300;
    }
}
 //优化方式一  策略设计模式
    @Test
    public void Test2(){
        List<TestUser> list = filterUser(userList, new UserByAgeimpl());
        for(TestUser user:list){
            System.out.println(user);
        }
        System.out.println("========================");
        List<TestUser> list2 = filterUser(userList, new UserBySalaryimpl());
        for(TestUser user:list2){
            System.out.println(user);
        }
    }
    public List<TestUser> filterUser(List<TestUser> userList,UserInterfase<TestUser>mp){
        List<TestUser>list = new ArrayList<>();
        for(TestUser user:userList){
           if(mp.test(user)){
               list.add(user);
           }
        }
        return list;
    }

    //优化方式二  匿名内部类
    @Test
    public void test3(){
       List<TestUser>list = filterUser(userList, new UserInterfase<TestUser>() {
            @Override
            public boolean test(TestUser user) {
                return user.getAge()>=30;
            }
        });
       for(TestUser user:list){
           System.out.println(user);
       }
        System.out.println("====================");
        List<TestUser>list2 = filterUser(userList, new UserInterfase<TestUser>() {
            @Override
            public boolean test(TestUser user) {
                return user.getSalary()>=300;
            }
        });
        for(TestUser user:list2){
            System.out.println(user);
        }
    }

    //优化方式三  Lambda表达式
    @Test
    public void test4(){
        List<TestUser> list1 = filterUser(userList, (e) -> e.getAge() >= 30);
        List<TestUser> list2 = filterUser(userList, (e) -> e.getSalary() >= 300);
        list1.forEach(System.out::println);
        System.out.println("============================");
        list2.forEach(System.out::println);
    }

    //优化方式四   stream api
    @Test
    public void test5(){
        Stream<TestUser> list = userList.stream()
                .filter((e) -> e.getAge() >= 30);

        list.forEach(System.out::println);
        System.out.println("========================");
        Stream<TestUser> list2 = userList.stream()
                .filter((e) -> e.getSalary() >= 300);
        list2.forEach(System.out::println);
        System.out.println("========================");
        //取出list中的前2个
        Stream<TestUser> list3 = userList.stream()
                .filter((e) -> e.getSalary() >= 300)
                .limit(2);
        list3.forEach(System.out::println);
        System.out.println("========================");
        Stream<String> list4 = userList.stream()
                .map(TestUser::getName);
        list4.forEach(System.out::println);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值