TOC
map/jsonobject/set/list链式添加工具类
工具类
import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CollectionBuilder {
public static <K, V> MapBuilder<K, V> builder(Map<K, V> map) {
return new MapBuilder<>(map);
}
public static JSONObjectBuilder builder(JSONObject jSONObject) {
return new JSONObjectBuilder(jSONObject);
}
public static <V> ListBuilder<V> builder(List<V> list) {
return new ListBuilder<>(list);
}
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;
}
}
}
使用案例
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();
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现