zoukankan      html  css  js  c++  java
  • java8之行为参数化

    今天看到一块switch代码,觉得又臭又长,可以优化一下,只需要将函数名作为入参进行改造,有点类似于策略模式。

    以下是使用Java8进行行为参数化的简单案例:

    User.java

    import lombok.Data;
    import lombok.ToString;
    
    @Data
    @ToString
    public class User {
    
        public User(Integer age) {
            this.age = age;
        }
    
        private Integer age;
    }

    UserPredicate.java

    public interface CommonPredicate<T> {
        boolean test(T t);
    }

    Filter.java

    import java.util.ArrayList;
    import java.util.List;
    
    public class Filter {
    
        /**
         * list 类型抽象化
         *
         * @param list
         * @param p
         * @param <T>
         * @return
         */
        public static <T> List<T> filter(List<T> list, CommonPredicate<T> p) {
            List<T> result = new ArrayList<T>();
            for (T t : list) {
                if (p.test(t)) {
                    result.add(t);
                }
            }
            return result;
        }
    
        public List<User> oldUser(List<User> inventory) {
            return filter(inventory, (User user) -> user.getAge() > 50);
        }
    
        public List<User> youngUser(List<User> inventory) {
            return filter(inventory, (User user) -> user.getAge() < 20);
        }
    
        public static void main(String[] args) {
            List<User> userList = new ArrayList<>();
            userList.add(new User(11));
            userList.add(new User(21));
            userList.add(new User(31));
            userList.add(new User(41));
            userList.add(new User(51));
            userList.add(new User(61));
    
            Filter filter = new Filter();
            List<User> oldList = filter.oldUser(userList);
            oldList.forEach(r -> System.out.println(r.toString()));
    
            System.out.println("=======");
            List<User> youngerList = filter.youngUser(userList);
            youngerList.forEach(y -> System.out.println(y.toString()));
        }
    }

    Filter.java里面的main方法的输出结果如下:

    User(age=51)
    User(age=61)
    =======
    User(age=11)

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/miaoying/p/12019121.html
Copyright © 2011-2022 走看看