zoukankan      html  css  js  c++  java
  • map/jsonobject/set/list链式添加工具类

    TOC

    map/jsonobject/set/list链式添加工具类

    工具类

    import com.alibaba.fastjson.JSONObject;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * @author jingshiyu
     * @date 2019/10/25 13:47:53
     * @desc
     */
    public class CollectionBuilder {
    
        /**
         * map的build方法
         *
         * @param map
         * @return
         * @date 2019/10/25 14:36
         */
        public static <K, V> MapBuilder<K, V> builder(Map<K, V> map) {
            return new MapBuilder<>(map);
        }
    
        /**
         * JsonObject的build方法
         *
         * @param jSONObject
         * @return
         * @date 2019/10/25 14:36
         */
        public static JSONObjectBuilder builder(JSONObject jSONObject) {
            return new JSONObjectBuilder(jSONObject);
        }
    
        /**
         * list的build方法
         *
         * @param list
         * @return
         * @date 2019/10/25 14:36
         */
        public static <V> ListBuilder<V> builder(List<V> list) {
            return new ListBuilder<>(list);
        }
    
        /**
         * set的build方法
         *
         * @param set
         * @return
         * @date 2019/10/25 14:36
         */
        public static <V> SetBuilder<V> builder(Set<V> set) {
            return new SetBuilder<>(set);
        }
    
        public static class MapBuilder<K, V> {
    
            private Map<K, V> map;
            private boolean underConstruction;
    
            private MapBuilder(Map<K, V> map) {
                this.map = map;
                underConstruction = true;
            }
    
            public MapBuilder<K, V> put(K k, V v) {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying map has already been built");
                }
                map.put(k, v);
                return this;
            }
    
            public Map<K, V> build() {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying map has already been built");
                }
                underConstruction = false;
                return map;
            }
        }
    
        public static class JSONObjectBuilder {
    
            private JSONObject jSONObject;
            private boolean underConstruction;
    
            private JSONObjectBuilder(JSONObject jSONObject) {
                this.jSONObject = jSONObject;
                underConstruction = true;
            }
    
            public JSONObjectBuilder put(String k, Object v) {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying jSONObject has already been built");
                }
                jSONObject.put(k, v);
                return this;
            }
    
            public JSONObject build() {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying jSONObject has already been built");
                }
                underConstruction = false;
                return jSONObject;
            }
        }
    
        public static class ListBuilder<V> {
    
            private List<V> list;
            private boolean underConstruction;
    
            private ListBuilder(List<V> list) {
                this.list = list;
                underConstruction = true;
            }
    
            public ListBuilder<V> add(V v) {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying list has already been built");
                }
                list.add(v);
                return this;
            }
    
            public List<V> build() {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying list has already been built");
                }
                underConstruction = false;
                return list;
            }
        }
    
        public static class SetBuilder<V> {
    
            private Set<V> set;
            private boolean underConstruction;
    
            private SetBuilder(Set<V> set) {
                this.set = set;
                underConstruction = true;
            }
    
            public SetBuilder<V> add(V v) {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying set has already been built");
                }
                set.add(v);
                return this;
            }
    
            public Set<V> build() {
                if (!underConstruction) {
                    throw new IllegalStateException("Underlying set has already been built");
                }
                underConstruction = false;
                return set;
            }
        }
    
    }
    

    使用案例

    //调用工具类的builder方法,传入需要链式处理的对象即可
    List<String> put = CollectionBuilder.builder(new ArrayList<String>())
        .add("234").add("4324").add("43243")
        .build();
    Map<String, String> aaa = CollectionBuilder.builder(new HashMap<String, String>())
        .put("111", "222").put("121","123" )
        .build();
    Map<String, String> bbb = CollectionBuilder.builder(new LinkedHashMap<String, String>())
        .put("111", "222").put("aaa","bbb" )
        .build();
  • 相关阅读:
    dblink && 视图 数据库二合一
    oracle mybatis 逆向工程 应当注意的问题
    关于使用vue搭建前后端分离的项目,部署过程遇到的问题
    详解vue静态资源打包中的坑与解决方案
    bootstarap table 分页导出 vue版
    react中两个控件不是父子关系该怎么传递消息或任意控件怎么传递消息
    虚拟DOM中key的作用
    修改Antd的List列表的单个数据行
    移动端开发如何关闭手机键盘
    在一行显示两个数据,左边的数据右对齐,右边的数据左对齐
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/11738117.html
Copyright © 2011-2022 走看看