Kv工具类取值优化

This commit is contained in:
aoshiguchen
2023-03-01 18:37:14 +08:00
parent a9f04eb785
commit a4173984e5
2 changed files with 123 additions and 7 deletions
@@ -1,6 +1,8 @@
package fun.asgc.neutrino.core.base;
import fun.asgc.neutrino.core.util.TypeUtil;
import java.io.Serializable;
import java.util.*;
@@ -35,6 +37,11 @@ public class Kv<K,V> implements Map<K,V> , Serializable, Cloneable {
return new Kv(parent);
}
public Kv<K,V> set(K k, V v) {
this.put(k, v);
return this;
}
public Kv(Kv<K,V> parent, int initialCapacity, Locale locale) {
this.parent = parent;
this._m = new LinkedHashMap<K, V>(initialCapacity) {
@@ -131,6 +138,14 @@ public class Kv<K,V> implements Map<K,V> , Serializable, Cloneable {
return res;
}
public V stackGetOrDefault(K k, V defaultValue) {
V res = this.stackGet(k);
if (null == res) {
res = defaultValue;
}
return res;
}
@Override
public V put(K key, V value) {
K k = key;
@@ -218,4 +233,92 @@ public class Kv<K,V> implements Map<K,V> , Serializable, Cloneable {
return res;
}
// ====== 为了方便取值操作,take开头的方法,全部基于栈式取值 =======
public V take(K k) {
return this.stackGet(k);
}
public V take(K k, V defaultValue) {
return this.stackGetOrDefault(k, defaultValue);
}
public String takeStr(K k) {
return TypeUtil.conversion(take(k), String.class);
}
public String takeStr(K k, String defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), String.class);
}
public Byte takeByte(K k) {
return TypeUtil.conversion(take(k), Byte.class);
}
public Byte takeByte(K k, Byte defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Byte.class);
}
public Character takeChar(K k) {
return TypeUtil.conversion(take(k), Character.class);
}
public Character takeChar(K k, Character defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Character.class);
}
public Boolean takeBool(K k) {
return TypeUtil.conversion(take(k), Boolean.class);
}
public Boolean takeBool(K k, Boolean defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Boolean.class);
}
public Short takeShort(K k) {
return TypeUtil.conversion(take(k), Short.class);
}
public Short takeShort(K k, Short defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Short.class);
}
public Integer takeInt(K k) {
return TypeUtil.conversion(take(k), Integer.class);
}
public Integer takeInt(K k, Integer defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Integer.class);
}
public Long takeLong(K k) {
return TypeUtil.conversion(take(k), Long.class);
}
public Long takeLong(K k, Long defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Long.class);
}
public Float takeFloat(K k) {
return TypeUtil.conversion(take(k), Float.class);
}
public Float takeFloat(K k, Float defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Float.class);
}
public Double takeDouble(K k) {
return TypeUtil.conversion(take(k), Double.class);
}
public Double takeDouble(K k, Double defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Double.class);
}
public Date takeDate(K k) {
return TypeUtil.conversion(take(k), Date.class);
}
public Date takeDate(K k, Date defaultValue) {
return TypeUtil.conversion(take(k, (V)defaultValue), Date.class);
}
}
@@ -10,15 +10,18 @@ import org.junit.Test;
public class KvTest {
@Test
public void test1() {
Kv<String, Object> kv1 = Kv.of();
kv1.put("app.server.http.http-port", 8080);
kv1.put("app.server.http.jks_Path", "/123/456");
Kv kv1 = Kv.of()
.set("app.server.http.http-port", 8080)
.set("app.server.http.jks_Path", "/123/456")
;
Kv<String, Object> kv2 = Kv.of(kv1);
kv2.put("app.server.http.httpPort", 8081);
kv2.put("app.server.http.context-path", "/");
Kv<String, Object> kv3 = Kv.of(kv2);
Kv kv2 = Kv.of(kv1)
.set("app.server.http.httpPort", 8081)
.set("app.server.http.context-path", "/")
;
Kv kv3 = Kv.of(kv2);
Assert.assertTrue(!kv1.isEmpty());
Assert.assertTrue(kv1.size() == 2);
@@ -45,5 +48,15 @@ public class KvTest {
Assert.assertTrue(!kv3.isStackEmpty());
Assert.assertTrue(kv3.size() == 0);
Assert.assertTrue(kv3.stackSize() == 4);
Assert.assertTrue(kv3.get("app.server.http.jks-path") == null);
Assert.assertTrue(kv3.get("app.server.http.jksPath") == null);
Assert.assertTrue(kv3.get("app.server.http.context-path") == null);
Assert.assertTrue(kv3.stackGet("app.server.http.jks-path").equals("/123/456"));
Assert.assertTrue(kv3.stackGet("app.server.http.jksPath").equals("/123/456"));
Assert.assertTrue(kv3.stackGet("app.server.http.context-path").equals("/"));
Assert.assertTrue(kv3.stackGetOrDefault("app.server.http.timeout", 60000).equals(60000));
Assert.assertTrue(kv3.takeStr("app.server.http.http-port").equals("8081"));
}
}