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)

  • 相关阅读:
    让8个数码管全部显示数字
    程序存储空间与内存
    点亮数码管,显示具体的数字
    为什么点亮小灯时,有时是输入数字0,有时是数字1
    循环点亮LED灯
    keil 编程时,总是中英文切换时,格式混乱。
    点亮LED灯
    学生管理系统(C 大一期末作业)
    ivew ui
    git常见操作
  • 原文地址:https://www.cnblogs.com/miaoying/p/12019121.html
Copyright © 2011-2022 走看看