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)

  • 相关阅读:
    [Linux] day04——Linux 入门
    react 资源汇总
    画原型图工具
    Atom 插件安装
    react 编写组件 五
    webstom 配置git 后左侧菜单栏配色调整
    Webstorm 不识别es6 import React from ‘react’——webstorm不支持jsx语法怎么办
    Es6 之for of
    一个react的完整项目展示
    前后端分离 接口管理神器——Rap本地搭建
  • 原文地址:https://www.cnblogs.com/miaoying/p/12019121.html
Copyright © 2011-2022 走看看