package com.haogrgr.test.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 自已用的Map工具类, 大部分API参考Guava, 主要是为了没有guava时使用. 主要目的:精简代码
*
* @author desheng.tu
* @since 2015年7月23日 下午1:32:28
*
*/
public class Maps {
public static void main(String[] args) {
System.out.println(Maps.of(1, "a"));
System.out.println(Maps.of(1, "a", 2, "b"));
System.out.println(Maps.of(1, "a", 2, "b", 3, "c"));
System.out.println(Maps.of(1, "a", 2, "b", 3, "c", 4, "d"));
System.out.println(Maps.builder().plus(1, "a").build());
System.out.println(Maps.builder().plus(1, "a", 2, "b").build());
System.out.println(Maps.builder().plus(1, "a", 2, "b", 3, "c").build());
System.out.println(Maps.builder().plus(1, "a", 2, "b", 3, "c", 4, "d").build());
System.out.println(Maps.builder().plusNotNull(1, null, 2, null, 3, null, 4, null).build());
}
public static <K, V> Map<K, V> of(K k, V v) {
Map<K, V> map = new HashMap<>(4);
map.put(k, v);
return map;
}
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
Map<K, V> map = new HashMap<>(4);
map.put(k1, v1);
map.put(k2, v2);
return map;
}
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
Map<K, V> map = new HashMap<>(8);
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
return map;
}
public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
Map<K, V> map = new HashMap<>(8);
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
map.put(k4, v4);
return map;
}
public static <K, V> Map<K, V> plus(Map<K, V> map, K k1, V v1) {
map.put(k1, v1);
return map;
}
public static <K, V> Map<K, V> plus(Map<K, V> map, K k1, V v1, K k2, V v2) {
map.put(k1, v1);
map.put(k2, v2);
return map;
}
public static <K, V> Map<K, V> plus(Map<K, V> map, K k1, V v1, K k2, V v2, K k3, V v3) {
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
return map;
}
public static <K, V> Map<K, V> plus(Map<K, V> map, K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
map.put(k4, v4);
return map;
}
public static <K, V> Builder<K, V> builder() {
return new Builder<K, V>();
}
public static <K, V> Builder<K, V> builder(Map<K, V> map) {
return new Builder<K, V>(map);
}
public static <K, V> Builder<K, V> builder(int initialCapacity) {
return new Builder<K, V>(initialCapacity);
}
public static <K> Builder<K, Object> builderO() {
return new Builder<K, Object>();
}
public static class Builder<K, V> {
private final Map<K, V> map;
public Builder() {
this.map = new HashMap<>();
}
public Builder(Map<K, V> map) {
Objects.requireNonNull(map);
this.map = new HashMap<>(map);
}
public Builder(int initialCapacity) {
this.map = new HashMap<>(initialCapacity);
}
public Builder<K, V> plus(K k1, V v1) {
map.put(k1, v1);
return this;
}
public Builder<K, V> plus(K k1, V v1, K k2, V v2) {
map.put(k1, v1);
map.put(k2, v2);
return this;
}
public Builder<K, V> plus(K k1, V v1, K k2, V v2, K k3, V v3) {
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
return this;
}
public Builder<K, V> plus(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
map.put(k4, v4);
return this;
}
public Builder<K, V> plusNotNull(K k1, V v1) {
if (v1 != null) {
map.put(k1, v1);
}
return this;
}
public Builder<K, V> plusNotNull(K k1, V v1, K k2, V v2) {
plusNotNull(k1, v1);
plusNotNull(k2, v2);
return this;
}
public Builder<K, V> plusNotNull(K k1, V v1, K k2, V v2, K k3, V v3) {
plusNotNull(k1, v1);
plusNotNull(k2, v2);
plusNotNull(k3, v3);
return this;
}
public Builder<K, V> plusNotNull(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
plusNotNull(k1, v1);
plusNotNull(k2, v2);
plusNotNull(k3, v3);
plusNotNull(k4, v4);
return this;
}
public Map<K, V> build() {
return map;
}
}
}