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();
posted @ 2019-10-25 15:08  紫月java  阅读(780)  评论(0编辑  收藏  举报