valueMapper) {
@@ -101,16 +94,20 @@ public boolean hasValue() {
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof Pair, ?> pair)) return false;
-
- return Objects.equals(key(), pair.key()) && Objects.equals(value(), pair.value());
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Pair, ?> pair)) {
+ return false;
+ }
+ return ObjectUtils.deepEquals(key, pair.key()) &&
+ ObjectUtils.deepEquals(value, pair.value());
}
@Override
public int hashCode() {
- int result = Objects.hashCode(key());
- result = 31 * result + Objects.hashCode(value());
+ int result = ObjectUtils.deepHashCode(key);
+ result = 31 * result + ObjectUtils.deepHashCode(value);
return result;
}
diff --git a/src/main/java/com/igeeksky/xtool/core/annotation/ParameterNames.java b/src/main/java/com/igeeksky/xtool/core/annotation/ParameterNames.java
deleted file mode 100644
index cbaa5ac..0000000
--- a/src/main/java/com/igeeksky/xtool/core/annotation/ParameterNames.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2021 Patrick.lau All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.igeeksky.xtool.core.annotation;
-
-import java.lang.annotation.*;
-
-/**
- * 记录参数名称信息
- *
- * JDK 1.8 之前不记录构造器和方法的参数名称;JDK 1.8 及之后的版本如果编译时未指定 -parameters,则默认不记录参数名称。
- * 因此需通过注解记录参数名信息,反射时才能根据名称匹配构造器和方法。
- *
- * @author Patrick.Lau
- * @since 0.0.4 2021-10-08
- */
-@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface ParameterNames {
-
- String[] value() default {};
-
-}
diff --git a/src/main/java/com/igeeksky/xtool/core/concurrent/Futures.java b/src/main/java/com/igeeksky/xtool/core/concurrent/Futures.java
index 157a19e..8a8d625 100644
--- a/src/main/java/com/igeeksky/xtool/core/concurrent/Futures.java
+++ b/src/main/java/com/igeeksky/xtool/core/concurrent/Futures.java
@@ -180,7 +180,7 @@ public static int checkAll(int start, Future>[] futures) {
* @param start 起始位置,从此位置开始取消未完成的任务
* @param futures 任务列表
*/
- public static void cancelAll(int start, Future>[] futures) {
+ public static void cancelAll(int start, Future>[] futures, boolean mayInterruptIfRunning) {
int i = start, len = futures.length;
for (; i < len; i++) {
Future> future = futures[i];
@@ -188,7 +188,10 @@ public static void cancelAll(int start, Future>[] futures) {
if (future.isDone()) {
continue;
}
- future.cancel(true);
+ if (future.isCancelled()) {
+ continue;
+ }
+ future.cancel(mayInterruptIfRunning);
}
}
}
@@ -207,6 +210,9 @@ public static void cancelAll(int start, ArrayList> futures) {
if (future.isDone()) {
continue;
}
+ if (future.isCancelled()) {
+ continue;
+ }
future.cancel(true);
}
}
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Pairs.java b/src/main/java/com/igeeksky/xtool/core/function/tuple/Pairs.java
deleted file mode 100644
index 92360f8..0000000
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Pairs.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2021 Patrick.lau All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.igeeksky.xtool.core.function.tuple;
-
-/**
- * 键值对工具类
- *
- * @author Patrick.Lau
- * @since 0.0.4 2021-10-21
- */
-public class Pairs {
-
- private static final Pair, ?> EMPTY = new Pair<>(null, null);
-
- /**
- * 静态工厂:构建 {@link Pair} 对象
- *
- * @param key 键
- * @param value 值
- * @param 键类型
- * @param 值类型
- * @return {@link Pair}
- */
- public static Pair of(K key, V value) {
- return new Pair<>(key, value);
- }
-
- /**
- * 静态工厂:返回不包含值的 {@link Pair} 单例对象
- *
- * @param 键类型
- * @param 值类型
- * @return {@link Pair} -- singleton
- */
- @SuppressWarnings("unchecked")
- public static Pair emptyPair() {
- return (Pair) EMPTY;
- }
-
-}
diff --git a/src/main/java/com/igeeksky/xtool/core/json/MethodResolver.java b/src/main/java/com/igeeksky/xtool/core/json/MethodResolver.java
index 394fc8d..d230e4c 100644
--- a/src/main/java/com/igeeksky/xtool/core/json/MethodResolver.java
+++ b/src/main/java/com/igeeksky/xtool/core/json/MethodResolver.java
@@ -1,8 +1,7 @@
package com.igeeksky.xtool.core.json;
+import com.igeeksky.xtool.core.Pair;
import com.igeeksky.xtool.core.collection.Maps;
-import com.igeeksky.xtool.core.function.tuple.Pair;
-import com.igeeksky.xtool.core.function.tuple.Pairs;
import com.igeeksky.xtool.core.lang.StringUtils;
import java.beans.Transient;
@@ -43,7 +42,7 @@ public static List> resolveReadMethod(Class> beanCla
List> properties = new ArrayList<>(readMethods.size());
for (Map.Entry entry : readMethods.entrySet()) {
- properties.add(Pairs.of(entry.getKey().toCharArray(), entry.getValue()));
+ properties.add(Pair.create(entry.getKey().toCharArray(), entry.getValue()));
}
return properties;
diff --git a/src/main/java/com/igeeksky/xtool/core/json/SimpleJSON.java b/src/main/java/com/igeeksky/xtool/core/json/SimpleJSON.java
index e04e7ad..858ac35 100644
--- a/src/main/java/com/igeeksky/xtool/core/json/SimpleJSON.java
+++ b/src/main/java/com/igeeksky/xtool/core/json/SimpleJSON.java
@@ -1,7 +1,7 @@
package com.igeeksky.xtool.core.json;
import com.igeeksky.xtool.core.collection.Maps;
-import com.igeeksky.xtool.core.function.tuple.Pair;
+import com.igeeksky.xtool.core.Pair;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
diff --git a/src/main/java/com/igeeksky/xtool/core/lang/ObjectUtils.java b/src/main/java/com/igeeksky/xtool/core/lang/ObjectUtils.java
new file mode 100644
index 0000000..16f6192
--- /dev/null
+++ b/src/main/java/com/igeeksky/xtool/core/lang/ObjectUtils.java
@@ -0,0 +1,104 @@
+package com.igeeksky.xtool.core.lang;
+
+import java.util.Arrays;
+
+/**
+ * Object 工具类
+ *
+ * @author Patrick.Lau
+ * @since 1.0.0
+ */
+public final class ObjectUtils {
+
+ /**
+ * 获取对象的哈希值
+ *
+ * @param obj 对象
+ * @return 哈希值
+ */
+ public static int deepHashCode(Object obj) {
+ if (obj == null) {
+ return 0;
+ }
+ if (obj.getClass().isArray()) {
+ return arrayHashCode(obj);
+ }
+ return obj.hashCode();
+ }
+
+ private static int arrayHashCode(Object o) {
+ if (o instanceof Object[] array) {
+ return Arrays.deepHashCode(array);
+ }
+ if (o instanceof byte[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof int[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof long[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof char[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof short[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof boolean[] array) {
+ return Arrays.hashCode(array);
+ }
+ if (o instanceof double[] array) {
+ return Arrays.hashCode(array);
+ }
+ return Arrays.hashCode((float[]) o);
+ }
+
+ public static boolean deepEquals(Object o1, Object o2) {
+ if (o1 == o2) {
+ return true;
+ }
+ if (o1 == null || o2 == null) {
+ return false;
+ }
+ if (o1.equals(o2)) {
+ return true;
+ }
+ if (o1.getClass().isArray() && o2.getClass().isArray()) {
+ return arrayDeepEquals(o1, o2);
+ }
+ return false;
+ }
+
+ private static boolean arrayDeepEquals(Object o1, Object o2) {
+ if (o1 instanceof Object[] && o2 instanceof Object[]) {
+ return Arrays.deepEquals((Object[]) o1, (Object[]) o2);
+ }
+ if (o1 instanceof byte[] && o2 instanceof byte[]) {
+ return Arrays.equals((byte[]) o1, (byte[]) o2);
+ }
+ if (o1 instanceof int[] && o2 instanceof int[]) {
+ return Arrays.equals((int[]) o1, (int[]) o2);
+ }
+ if (o1 instanceof long[] && o2 instanceof long[]) {
+ return Arrays.equals((long[]) o1, (long[]) o2);
+ }
+ if (o1 instanceof char[] && o2 instanceof char[]) {
+ return Arrays.equals((char[]) o1, (char[]) o2);
+ }
+ if (o1 instanceof short[] && o2 instanceof short[]) {
+ return Arrays.equals((short[]) o1, (short[]) o2);
+ }
+ if (o1 instanceof double[] && o2 instanceof double[]) {
+ return Arrays.equals((double[]) o1, (double[]) o2);
+ }
+ if (o1 instanceof float[] && o2 instanceof float[]) {
+ return Arrays.equals((float[]) o1, (float[]) o2);
+ }
+ if (o1 instanceof boolean[] && o2 instanceof boolean[]) {
+ return Arrays.equals((boolean[]) o1, (boolean[]) o2);
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/com/igeeksky/xtool/core/nlp/BaseNode.java b/src/main/java/com/igeeksky/xtool/core/nlp/BaseNode.java
index d5600fb..0d562d4 100644
--- a/src/main/java/com/igeeksky/xtool/core/nlp/BaseNode.java
+++ b/src/main/java/com/igeeksky/xtool/core/nlp/BaseNode.java
@@ -87,12 +87,10 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof BaseNode)) {
+ if (!(o instanceof BaseNode> baseNode)) {
return false;
}
- BaseNode> baseNode = (BaseNode>) o;
-
if (getC() != baseNode.getC()) {
return false;
}
diff --git a/src/main/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie.java b/src/main/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie.java
index 74c0325..cc8ae47 100644
--- a/src/main/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie.java
+++ b/src/main/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie.java
@@ -17,8 +17,8 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
-import com.igeeksky.xtool.core.function.tuple.Tuples;
+import com.igeeksky.xtool.core.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuples;
import com.igeeksky.xtool.core.lang.Assert;
import com.igeeksky.xtool.core.lang.IntegerValue;
@@ -131,7 +131,7 @@ public Tuple2 prefixMatch(String word, boolean longestMatch) {
} finally {
readLock.unlock();
}
- return (found == null) ? null : Tuples.of(found.getKey(), found.getValue());
+ return (found == null) ? null : Tuples.of(found.key(), found.value());
}
@Override
@@ -154,7 +154,7 @@ public List> prefixMatchAll(String word, int maximum) {
}
List> result = new LinkedList<>();
- founds.forEach(find -> result.add(Tuples.of(find.getKey(), find.getValue())));
+ founds.forEach(find -> result.add(Tuples.of(find.key(), find.value())));
return result;
}
@@ -261,7 +261,7 @@ public List> match(String text, boolean longestMatch, boolean oneByOne)
if (null != found) {
founds.add(found);
if (!oneByOne) {
- i = found.getEnd();
+ i = found.end();
}
}
}
@@ -295,7 +295,7 @@ public List> matchAll(String text, boolean oneByOne, int maximum) {
if (!oneByOne && size > 0) {
if (founds.getLast() != last) {
last = founds.getLast();
- i = last.getEnd();
+ i = last.end();
}
}
}
diff --git a/src/main/java/com/igeeksky/xtool/core/nlp/Found.java b/src/main/java/com/igeeksky/xtool/core/nlp/Found.java
index 0fd0d58..0826f41 100644
--- a/src/main/java/com/igeeksky/xtool/core/nlp/Found.java
+++ b/src/main/java/com/igeeksky/xtool/core/nlp/Found.java
@@ -20,99 +20,52 @@
/**
* 用于文本段的关键字过滤,返回关键字在文本段中的起止位置
*
- * @param 与Node的值类型相同
+ * @param 与Node的值类型相同
+ * @param begin key 在文本段中的起始位置
+ * @param end key 在文本段中的结束位置
+ * @param value key 对应的 value
* @author Patrick.Lau
* @since 0.0.4 2021-10-23
*/
-public class Found {
-
- /**
- * key 在文本段中的起始位置
- */
- private final int start;
-
- /**
- * key 在文本段中的结束位置
- */
- private final int end;
-
- private final String key;
-
- /**
- * key 对应的 value
- */
- private final V value;
-
- public Found(int start, int end, String key, V value) {
- this.start = start;
- this.end = end;
- this.key = key;
- this.value = value;
- }
-
- /**
- * @return value 在文本中的开始位置
- */
- public int getStart() {
- return start;
- }
-
- /**
- * @return value 在文本中的结束位置
- */
- public int getEnd() {
- return end;
- }
-
- public String getKey() {
- return key;
- }
-
- /**
- * @return value值
- */
- public V getValue() {
- return value;
- }
+public record Found(int begin, int end, String key, V value) {
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Found)) {
+ if (!(o instanceof Found> found)) {
return false;
}
- Found> found = (Found>) o;
-
- if (getStart() != found.getStart()) {
+ if (begin() != found.begin()) {
return false;
}
- if (getEnd() != found.getEnd()) {
+ if (end() != found.end()) {
return false;
}
- if (getKey() != null ? !getKey().equals(found.getKey()) : found.getKey() != null) {
+ if (key() != null ? !key().equals(found.key()) : found.key() != null) {
return false;
}
- return getValue() != null ? getValue().equals(found.getValue()) : found.getValue() == null;
+ return value() != null ? value().equals(found.value()) : found.value() == null;
}
@Override
public int hashCode() {
- int result = getKey() != null ? getKey().hashCode() : 0;
- result = 31 * result + getStart();
- result = 31 * result + getEnd();
- result = 31 * result + (getValue() != null ? getValue().hashCode() : 0);
+ int result = key() != null ? key().hashCode() : 0;
+ result = 31 * result + begin();
+ result = 31 * result + end();
+ result = 31 * result + (value() != null ? value().hashCode() : 0);
return result;
}
@Override
public String toString() {
- return "{\"start\":" + start +
+ return "{\"begin\":" + begin +
", \"end\":" + end +
(null == key ? "" : (", \"key\":\"" + key + "\"")) +
(null == value ? "" : (", \"value\":\"" + value + "\"")) +
"}";
}
+
}
\ No newline at end of file
diff --git a/src/main/java/com/igeeksky/xtool/core/nlp/NodeHelper.java b/src/main/java/com/igeeksky/xtool/core/nlp/NodeHelper.java
index 653daa6..ccc591c 100644
--- a/src/main/java/com/igeeksky/xtool/core/nlp/NodeHelper.java
+++ b/src/main/java/com/igeeksky/xtool/core/nlp/NodeHelper.java
@@ -18,8 +18,8 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
-import com.igeeksky.xtool.core.function.tuple.Tuples;
+import com.igeeksky.xtool.core.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuples;
import java.util.Arrays;
import java.util.Iterator;
diff --git a/src/main/java/com/igeeksky/xtool/core/nlp/Trie.java b/src/main/java/com/igeeksky/xtool/core/nlp/Trie.java
index eba10f6..fe0cf05 100644
--- a/src/main/java/com/igeeksky/xtool/core/nlp/Trie.java
+++ b/src/main/java/com/igeeksky/xtool/core/nlp/Trie.java
@@ -17,7 +17,7 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuple2;
import java.util.List;
import java.util.TreeMap;
@@ -235,7 +235,7 @@ public interface Trie {
*
*
* Trie中已有:ab, abc, abcd, abd, bcd
- * trie.match("xxabcdexx") == [{"start":2, "end":5, "key":"abcd", "value":"abcd"}, {"start":3, "end":5, "key":"bcd", "value":"bcd"}]
+ * trie.match("xxabcdexx") == [{"begin":2, "end":5, "key":"abcd", "value":"abcd"}, {"begin":3, "end":5, "key":"bcd", "value":"bcd"}]
*
*
* @param text 文本段(不为空且长度大于0)
@@ -252,16 +252,16 @@ public interface Trie {
* Trie中已有:ab, abc, abcd, abd, bcd
*
* trie.match("xxabcdexx", true, true) ==
- * [{"start":2, "end":5, "key":"abcd", "value":"abcd"}, {"start":3, "end":5, "key":"bcd", "value":"bcd"}]
+ * [{"begin":2, "end":5, "key":"abcd", "value":"abcd"}, {"begin":3, "end":5, "key":"bcd", "value":"bcd"}]
*
* trie.match("xxabcdexx", true, false) ==
- * [{"start":2, "end":5, "key":"abcd", "value":"abcd"}]
+ * [{"begin":2, "end":5, "key":"abcd", "value":"abcd"}]
*
* trie.match("xxabcdexx", false, true) ==
- * [{"start":2, "end":3, "key":"ab", "value":"ab"}, {"start":3, "end":5, "key":"bcd", "value":"bcd"}]
+ * [{"begin":2, "end":3, "key":"ab", "value":"ab"}, {"begin":3, "end":5, "key":"bcd", "value":"bcd"}]
*
* trie.match("xxabcdexx", false, false) ==
- * [{"start":2, "end":3, "key":"ab", "value":"ab"}]
+ * [{"begin":2, "end":3, "key":"ab", "value":"ab"}]
*
*
* @param text 文本段(不为空且长度大于0)
@@ -290,8 +290,8 @@ public interface Trie {
* 例:
* Trie中已有:ab, abc, abcd, abd, bcd
* trie.matchAll("xxabcdexx") ==
- * [{"start":2, "end":3, "key":"ab", "value":"ab"}, {"start":2, "end":4, "key":"abc", "value":"abc"},
- * {"start":2, "end":5, "key":"abcd", "value":"abcd"}, {"start":3, "end":5, "key":"bcd", "value":"bcd"}]
+ * [{"begin":2, "end":3, "key":"ab", "value":"ab"}, {"begin":2, "end":4, "key":"abc", "value":"abc"},
+ * {"begin":2, "end":5, "key":"abcd", "value":"abcd"}, {"begin":3, "end":5, "key":"bcd", "value":"bcd"}]
*
*
* @param text 文本段(不为空且长度大于0)
@@ -313,16 +313,16 @@ public interface Trie {
* Trie中已有:ab, abc, abcd, abd, bcd
*
* trie.matchAll("xxabcdexx", true, Integer.MAX_VALUE) ==
- * [{"start":2, "end":3, "key":"ab", "value":"ab"}, {"start":2, "end":4, "key":"abc", "value":"abc"},
- * {"start":2, "end":5, "key":"abcd", "value":"abcd"}, {"start":3, "end":5, "key":"bcd", "value":"bcd"}]
+ * [{"begin":2, "end":3, "key":"ab", "value":"ab"}, {"begin":2, "end":4, "key":"abc", "value":"abc"},
+ * {"begin":2, "end":5, "key":"abcd", "value":"abcd"}, {"begin":3, "end":5, "key":"bcd", "value":"bcd"}]
*
* trie.matchAll("xxabcdexx", false, Integer.MAX_VALUE) ==
- * [{"start":2, "end":3, "key":"ab", "value":"ab"}, {"start":2, "end":4, "key":"abc", "value":"abc"},
- * {"start":2, "end":5, "key":"abcd", "value":"abcd"}]
+ * [{"begin":2, "end":3, "key":"ab", "value":"ab"}, {"begin":2, "end":4, "key":"abc", "value":"abc"},
+ * {"begin":2, "end":5, "key":"abcd", "value":"abcd"}]
*
*
- * trie.matchAll("xxabcdexx", true, 1) == [{"start":2, "end":3, "key":"ab", "value":"ab"}]
- * trie.matchAll("xxabcdexx", false, 1) == [{"start":2, "end":3, "key":"ab", "value":"ab"}]
+ * trie.matchAll("xxabcdexx", true, 1) == [{"begin":2, "end":3, "key":"ab", "value":"ab"}]
+ * trie.matchAll("xxabcdexx", false, 1) == [{"begin":2, "end":3, "key":"ab", "value":"ab"}]
*
*
*
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple.java
similarity index 95%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple.java
index 2404c37..67db90b 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import java.util.Iterator;
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple1.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple1.java
similarity index 86%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple1.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple1.java
index 065230f..7060b4f 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple1.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple1.java
@@ -15,7 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
+
+import com.igeeksky.xtool.core.lang.ObjectUtils;
import java.util.Arrays;
import java.util.Objects;
@@ -66,20 +68,19 @@ public Object[] toArray() {
}
@Override
- public boolean equals(Object o) {
+ public final boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Tuple1)) {
+ if (!(o instanceof Tuple1> tuple1)) {
return false;
}
- Tuple1> tuple1 = (Tuple1>) o;
- return getT1().equals(tuple1.getT1());
+ return ObjectUtils.deepEquals(t1, tuple1.t1);
}
@Override
public int hashCode() {
- return getT1().hashCode();
+ return ObjectUtils.deepHashCode(t1);
}
@Override
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple2.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple2.java
similarity index 86%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple2.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple2.java
index c1431c9..2633c35 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple2.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple2.java
@@ -15,7 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
+
+import com.igeeksky.xtool.core.lang.ObjectUtils;
import java.util.Arrays;
import java.util.Objects;
@@ -92,22 +94,17 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Tuple2)) {
- return false;
- }
-
- Tuple2, ?> tuple2 = (Tuple2, ?>) o;
-
- if (!getT1().equals(tuple2.getT1())) {
+ if (!(o instanceof Tuple2, ?> tuple2)) {
return false;
}
- return getT2().equals(tuple2.getT2());
+ return ObjectUtils.deepEquals(t1, tuple2.t1)
+ && ObjectUtils.deepEquals(t2, tuple2.t2);
}
@Override
public int hashCode() {
- int result = getT1().hashCode();
- result = 31 * result + getT2().hashCode();
+ int result = ObjectUtils.deepHashCode(t1);
+ result = 31 * result + ObjectUtils.deepHashCode(t2);
return result;
}
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple3.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple3.java
similarity index 85%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple3.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple3.java
index f35c70d..fc7d892 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple3.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple3.java
@@ -15,7 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
+
+import com.igeeksky.xtool.core.lang.ObjectUtils;
import java.util.Arrays;
import java.util.Objects;
@@ -114,26 +116,19 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Tuple3)) {
- return false;
- }
-
- Tuple3, ?, ?> tuple3 = (Tuple3, ?, ?>) o;
-
- if (!getT1().equals(tuple3.getT1())) {
- return false;
- }
- if (!getT2().equals(tuple3.getT2())) {
+ if (!(o instanceof Tuple3, ?, ?> tuple3)) {
return false;
}
- return getT3().equals(tuple3.getT3());
+ return ObjectUtils.deepEquals(t1, tuple3.t1)
+ && ObjectUtils.deepEquals(t2, tuple3.t2)
+ && ObjectUtils.deepEquals(t3, tuple3.t3);
}
@Override
public int hashCode() {
- int result = getT1().hashCode();
- result = 31 * result + getT2().hashCode();
- result = 31 * result + getT3().hashCode();
+ int result = ObjectUtils.deepHashCode(t1);
+ result = 31 * result + ObjectUtils.deepHashCode(t2);
+ result = 31 * result + ObjectUtils.deepHashCode(t3);
return result;
}
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple4.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple4.java
similarity index 84%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple4.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple4.java
index 327760f..4bd3f6c 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple4.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple4.java
@@ -15,7 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
+
+import com.igeeksky.xtool.core.lang.ObjectUtils;
import java.util.Arrays;
import java.util.Objects;
@@ -136,30 +138,21 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Tuple4)) {
- return false;
- }
-
- Tuple4, ?, ?, ?> tuple4 = (Tuple4, ?, ?, ?>) o;
-
- if (!getT1().equals(tuple4.getT1())) {
- return false;
- }
- if (!getT2().equals(tuple4.getT2())) {
- return false;
- }
- if (!getT3().equals(tuple4.getT3())) {
+ if (!(o instanceof Tuple4, ?, ?, ?> tuple4)) {
return false;
}
- return t4.equals(tuple4.t4);
+ return ObjectUtils.deepEquals(t1, tuple4.t1)
+ && ObjectUtils.deepEquals(t2, tuple4.t2)
+ && ObjectUtils.deepEquals(t3, tuple4.t3)
+ && ObjectUtils.deepEquals(t4, tuple4.t4);
}
@Override
public int hashCode() {
- int result = getT1().hashCode();
- result = 31 * result + getT2().hashCode();
- result = 31 * result + getT3().hashCode();
- result = 31 * result + t4.hashCode();
+ int result = ObjectUtils.deepHashCode(t1);
+ result = 31 * result + ObjectUtils.deepHashCode(t2);
+ result = 31 * result + ObjectUtils.deepHashCode(t3);
+ result = 31 * result + ObjectUtils.deepHashCode(t4);
return result;
}
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple5.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple5.java
similarity index 84%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple5.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuple5.java
index cd7cc75..fc65017 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuple5.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuple5.java
@@ -15,7 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
+
+import com.igeeksky.xtool.core.lang.ObjectUtils;
import java.util.Arrays;
import java.util.Objects;
@@ -158,34 +160,23 @@ public boolean equals(Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof Tuple5)) {
- return false;
- }
-
- Tuple5, ?, ?, ?, ?> tuple5 = (Tuple5, ?, ?, ?, ?>) o;
-
- if (!getT1().equals(tuple5.getT1())) {
- return false;
- }
- if (!getT2().equals(tuple5.getT2())) {
- return false;
- }
- if (!getT3().equals(tuple5.getT3())) {
+ if (!(o instanceof Tuple5, ?, ?, ?, ?> tuple5)) {
return false;
}
- if (!getT4().equals(tuple5.getT4())) {
- return false;
- }
- return getT5().equals(tuple5.getT5());
+ return ObjectUtils.deepEquals(t1, tuple5.t1)
+ && ObjectUtils.deepEquals(t2, tuple5.t2)
+ && ObjectUtils.deepEquals(t3, tuple5.t3)
+ && ObjectUtils.deepEquals(t4, tuple5.t4)
+ && ObjectUtils.deepEquals(t5, tuple5.t5);
}
@Override
public int hashCode() {
- int result = getT1().hashCode();
- result = 31 * result + getT2().hashCode();
- result = 31 * result + getT3().hashCode();
- result = 31 * result + getT4().hashCode();
- result = 31 * result + getT5().hashCode();
+ int result = ObjectUtils.deepHashCode(t1);
+ result = 31 * result + ObjectUtils.deepHashCode(t2);
+ result = 31 * result + ObjectUtils.deepHashCode(t3);
+ result = 31 * result + ObjectUtils.deepHashCode(t4);
+ result = 31 * result + ObjectUtils.deepHashCode(t5);
return result;
}
@@ -193,4 +184,5 @@ public int hashCode() {
public String toString() {
return Arrays.toString(toArray());
}
+
}
diff --git a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuples.java b/src/main/java/com/igeeksky/xtool/core/tuple/Tuples.java
similarity index 97%
rename from src/main/java/com/igeeksky/xtool/core/function/tuple/Tuples.java
rename to src/main/java/com/igeeksky/xtool/core/tuple/Tuples.java
index e65359e..6fb7714 100644
--- a/src/main/java/com/igeeksky/xtool/core/function/tuple/Tuples.java
+++ b/src/main/java/com/igeeksky/xtool/core/tuple/Tuples.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import java.util.Iterator;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/ExpiryKeyValueTest.java b/src/test/java/com/igeeksky/xtool/core/ExpiryKeyValueTest.java
similarity index 99%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/ExpiryKeyValueTest.java
rename to src/test/java/com/igeeksky/xtool/core/ExpiryKeyValueTest.java
index 6a08177..fa7d039 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/ExpiryKeyValueTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/ExpiryKeyValueTest.java
@@ -1,4 +1,4 @@
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core;
import org.junit.jupiter.api.BeforeEach;
diff --git a/src/test/java/com/igeeksky/xtool/core/KeyValueTest.java b/src/test/java/com/igeeksky/xtool/core/KeyValueTest.java
new file mode 100644
index 0000000..7a79575
--- /dev/null
+++ b/src/test/java/com/igeeksky/xtool/core/KeyValueTest.java
@@ -0,0 +1,188 @@
+package com.igeeksky.xtool.core;
+
+
+import com.igeeksky.xtool.core.lang.Assert;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * KeyValue 测试类
+ *
+ * @author Patrick.Lau
+ * @since 1.0.21
+ */
+public class KeyValueTest {
+
+ private KeyValue kv0;
+ private KeyValue kv1;
+ private KeyValue kv2;
+ private KeyValue kv3;
+ private KeyValue kv4;
+ private KeyValue kv5;
+ private KeyValue kv6;
+ private KeyValue kv7;
+ private KeyValue kv8;
+ private KeyValue kv9;
+ private KeyValue kv10;
+
+ @BeforeEach
+ public void setUp() {
+ kv0 = KeyValue.create("key", 100);
+ kv1 = new KeyValue<>("key1", 1);
+ kv2 = new KeyValue<>("key1", 1);
+ kv3 = new KeyValue<>("key2", 1);
+ kv4 = new KeyValue<>("key1", 2);
+ kv5 = new KeyValue<>(null, null);
+ kv6 = new KeyValue<>(null, null);
+ kv7 = new KeyValue<>(null, 1);
+ kv8 = new KeyValue<>(null, new byte[0]);
+ kv9 = new KeyValue<>(null, new byte[0]);
+ kv10 = new KeyValue<>(null, new byte[]{1});
+ }
+
+ @Test
+ public void getKey_ShouldReturnKey() {
+ assertEquals("key", kv0.getKey());
+ }
+
+ @Test
+ public void getValue_ShouldReturnValue() {
+ assertEquals(100, kv0.getValue());
+ }
+
+ @Test
+ public void mapKey_ShouldMapKeyCorrectly() {
+ KeyValue mappedKeyValue = kv0.mapKey(String::length);
+ assertEquals(3, mappedKeyValue.getKey());
+ assertEquals(100, mappedKeyValue.getValue());
+ }
+
+ @Test
+ public void mapValue_ShouldMapValueCorrectly() {
+ KeyValue mappedKeyValue = kv0.mapValue(value -> String.valueOf(value * 2));
+ assertEquals("key", mappedKeyValue.getKey());
+ assertEquals("200", mappedKeyValue.getValue());
+ }
+
+ @Test
+ public void map_ShouldMapKeyAndValueCorrectly() {
+ KeyValue mappedKeyValue = kv0.map(
+ String::length,
+ value -> String.valueOf(value * 2)
+ );
+ assertEquals(3, mappedKeyValue.getKey());
+ assertEquals("200", mappedKeyValue.getValue());
+ }
+
+ @Test
+ public void hasKey_ShouldReturnTrueWhenKeyIsNotNull() {
+ assertTrue(kv0.hasKey());
+ }
+
+ @Test
+ public void hasKey_ShouldReturnFalseWhenKeyIsNull() {
+ KeyValue emptyKeyValue = KeyValue.empty();
+ assertFalse(emptyKeyValue.hasKey());
+ }
+
+ @Test
+ public void hasValue_ShouldReturnTrueWhenValueIsNotNull() {
+ assertTrue(kv0.hasValue());
+ }
+
+ @Test
+ public void hasValue_ShouldReturnFalseWhenValueIsNull() {
+ KeyValue emptyKeyValue = KeyValue.empty();
+ assertFalse(emptyKeyValue.hasValue());
+ }
+
+ @Test
+ public void empty_ShouldReturnEmptyKeyValue() {
+ KeyValue emptyKeyValue = KeyValue.empty();
+ assertNull(emptyKeyValue.getKey());
+ assertNull(emptyKeyValue.getValue());
+ }
+
+ @Test
+ public void create_ShouldCreateKeyValueWithGivenKeyAndValue() {
+ KeyValue createdKeyValue = KeyValue.create("newKey", 200);
+ assertEquals("newKey", createdKeyValue.getKey());
+ assertEquals(200, createdKeyValue.getValue());
+ }
+
+ @Test
+ public void equals_ShouldReturnTrueForEqualKeyValue() {
+ KeyValue anotherKeyValue = KeyValue.create("key", 100);
+ assertEquals(kv0, anotherKeyValue);
+ }
+
+ @Test
+ public void equals_ShouldReturnFalseForDifferentKeyValue() {
+ KeyValue differentKeyValue = KeyValue.create("anotherKey", 200);
+ assertNotEquals(kv0, differentKeyValue);
+ }
+
+ @Test
+ public void hashCode_ShouldReturnConsistentHashCode() {
+ int hashCode = kv0.hashCode();
+ assertEquals(hashCode, kv0.hashCode());
+ }
+
+ @Test
+ public void toString_ShouldReturnCorrectStringRepresentation() {
+ assertEquals("{\"key\":\"key\", \"value\":100}", kv0.toString());
+ }
+
+ @Test
+ public void equals_NullObject_ReturnsTrue() {
+ Assert.isFalse(kv1.equals(null));
+ }
+
+ @Test
+ public void equals_SameObject_ReturnsTrue() {
+ Assert.isTrue(kv1.equals(kv1));
+ }
+
+ @Test
+ public void equals_DifferentType_ReturnsFalse() {
+ Assert.isFalse(kv1.equals(Pair.create("key", 1)));
+ }
+
+ @Test
+ public void equals_SameKeyValue_ReturnsTrue() {
+ Assert.isTrue(kv1.equals(kv2));
+ }
+
+ @Test
+ public void equals_DifferentKey_ReturnsFalse() {
+ Assert.isFalse(kv1.equals(kv3));
+ }
+
+ @Test
+ public void equals_DifferentValue_ReturnsFalse() {
+ Assert.isFalse(kv1.equals(kv4));
+ }
+
+ @Test
+ public void equals_NullValues_ReturnsTrue() {
+ Assert.isTrue(kv5.equals(kv6));
+ }
+
+ @Test
+ public void equals_OneNullValue_ReturnsFalse() {
+ Assert.isFalse(kv5.equals(kv7));
+ }
+
+ @Test
+ public void equals_byteArrayValue_ReturnsTrue() {
+ Assert.isTrue(kv8.equals(kv9));
+ }
+
+ @Test
+ public void equals_byteArrayValue_ReturnsFalse() {
+ Assert.isFalse(kv8.equals(kv10));
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/PairTest.java b/src/test/java/com/igeeksky/xtool/core/PairTest.java
similarity index 62%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/PairTest.java
rename to src/test/java/com/igeeksky/xtool/core/PairTest.java
index d5cb37e..14d0f92 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/PairTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/PairTest.java
@@ -15,8 +15,9 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core;
+import com.igeeksky.xtool.core.tuple.Tuples;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -26,82 +27,96 @@
*/
public class PairTest {
+ @Test
+ public void create() {
+ Pair pair = Pair.create("key", "value");
+ Assertions.assertEquals("key", pair.key());
+ Assertions.assertEquals("value", pair.value());
+ }
+
+ @Test
+ public void emptyPair() {
+ Pair pair = Pair.emptyPair();
+ Assertions.assertNull(pair.key());
+ Assertions.assertNull(pair.value());
+ }
+
@Test
public void getKey() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Assertions.assertEquals("key", pair.key());
}
@Test
public void getValue() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Assertions.assertEquals("value", pair.value());
}
@Test
public void hasValue() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Assertions.assertTrue(pair.hasValue());
}
@Test
public void testHasValue() {
- Pair pair = Pairs.emptyPair();
+ Pair pair = Pair.emptyPair();
Assertions.assertFalse(pair.hasValue());
}
@Test
public void testEquals() {
- Pair pair = Pairs.emptyPair();
- Pair pair2 = Pairs.emptyPair();
+ Pair pair = Pair.emptyPair();
+ Pair pair2 = Pair.emptyPair();
Assertions.assertEquals(pair, pair2);
}
@Test
public void testEquals2() {
- Pair pair = Pairs.of("key", "value");
- Pair pair2 = Pairs.emptyPair();
+ Pair pair = Pair.create("key", "value");
+ Pair pair2 = Pair.emptyPair();
Assertions.assertNotEquals(pair, pair2);
Assertions.assertNotEquals(pair, Tuples.of("key", "value"));
}
@Test
public void testEquals3() {
- Pair, Pair> pair = Pairs.of(Pairs.of("key", "value"), Pairs.of("key", "value"));
- Pair, Pair> pair2 = Pairs.of(Pairs.of("key", "value"), Pairs.of("key", "value"));
+ Pair, Pair> pair = Pair.create(Pair.create("key", "value"), Pair.create("key", "value"));
+ Pair, Pair> pair2 = Pair.create(Pair.create("key", "value"), Pair.create("key", "value"));
Assertions.assertEquals(pair, pair2);
}
@Test
public void hashcode() {
- Pair pair = Pairs.of("key", "value");
- Pair pair2 = Pairs.emptyPair();
+ Pair pair = Pair.create("key", "value");
+ Pair pair2 = Pair.emptyPair();
Assertions.assertNotEquals(pair.hashCode(), pair2.hashCode());
}
@Test
public void testToString() {
- Pair, Pair> pair = Pairs.of(Pairs.of("key", "value"), Pairs.of("key", "value"));
+ Pair, Pair> pair = Pair.create(Pair.create("key", "value"), Pair.create("key", "value"));
Assertions.assertEquals("{\"key\":{\"key\":\"key\", \"value\":\"value\"}, \"value\":{\"key\":\"key\", \"value\":\"value\"}}", pair.toString());
}
@Test
public void mapKey() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Pair newPair = pair.mapKey((k) -> 1);
Assertions.assertEquals(Integer.valueOf(1), newPair.key());
}
@Test
public void mapValue() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Pair newPair = pair.mapValue((k) -> 1);
Assertions.assertEquals(Integer.valueOf(1), newPair.value());
}
@Test
public void hasKey() {
- Pair pair = Pairs.of("key", "value");
+ Pair pair = Pair.create("key", "value");
Assertions.assertTrue(pair.hasKey());
}
}
\ No newline at end of file
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/KeyValueTest.java b/src/test/java/com/igeeksky/xtool/core/function/tuple/KeyValueTest.java
deleted file mode 100644
index c0e0904..0000000
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/KeyValueTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.igeeksky.xtool.core.function.tuple;
-
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-/**
- * KeyValue 测试类
- *
- * @author Patrick.Lau
- * @since 1.0.21
- */
-public class KeyValueTest {
-
- private KeyValue keyValue;
-
- @BeforeEach
- public void setUp() {
- keyValue = KeyValue.create("key", 100);
- }
-
- @Test
- public void getKey_ShouldReturnKey() {
- assertEquals("key", keyValue.getKey());
- }
-
- @Test
- public void getValue_ShouldReturnValue() {
- assertEquals(100, keyValue.getValue());
- }
-
- @Test
- public void mapKey_ShouldMapKeyCorrectly() {
- KeyValue mappedKeyValue = keyValue.mapKey(String::length);
- assertEquals(3, mappedKeyValue.getKey());
- assertEquals(100, mappedKeyValue.getValue());
- }
-
- @Test
- public void mapValue_ShouldMapValueCorrectly() {
- KeyValue mappedKeyValue = keyValue.mapValue(value -> String.valueOf(value * 2));
- assertEquals("key", mappedKeyValue.getKey());
- assertEquals("200", mappedKeyValue.getValue());
- }
-
- @Test
- public void map_ShouldMapKeyAndValueCorrectly() {
- KeyValue mappedKeyValue = keyValue.map(
- String::length,
- value -> String.valueOf(value * 2)
- );
- assertEquals(3, mappedKeyValue.getKey());
- assertEquals("200", mappedKeyValue.getValue());
- }
-
- @Test
- public void hasKey_ShouldReturnTrueWhenKeyIsNotNull() {
- assertTrue(keyValue.hasKey());
- }
-
- @Test
- public void hasKey_ShouldReturnFalseWhenKeyIsNull() {
- KeyValue emptyKeyValue = KeyValue.empty();
- assertFalse(emptyKeyValue.hasKey());
- }
-
- @Test
- public void hasValue_ShouldReturnTrueWhenValueIsNotNull() {
- assertTrue(keyValue.hasValue());
- }
-
- @Test
- public void hasValue_ShouldReturnFalseWhenValueIsNull() {
- KeyValue emptyKeyValue = KeyValue.empty();
- assertFalse(emptyKeyValue.hasValue());
- }
-
- @Test
- public void empty_ShouldReturnEmptyKeyValue() {
- KeyValue emptyKeyValue = KeyValue.empty();
- assertNull(emptyKeyValue.getKey());
- assertNull(emptyKeyValue.getValue());
- }
-
- @Test
- public void create_ShouldCreateKeyValueWithGivenKeyAndValue() {
- KeyValue createdKeyValue = KeyValue.create("newKey", 200);
- assertEquals("newKey", createdKeyValue.getKey());
- assertEquals(200, createdKeyValue.getValue());
- }
-
- @Test
- public void equals_ShouldReturnTrueForEqualKeyValue() {
- KeyValue anotherKeyValue = KeyValue.create("key", 100);
- assertEquals(keyValue, anotherKeyValue);
- }
-
- @Test
- public void equals_ShouldReturnFalseForDifferentKeyValue() {
- KeyValue differentKeyValue = KeyValue.create("anotherKey", 200);
- assertNotEquals(keyValue, differentKeyValue);
- }
-
- @Test
- public void hashCode_ShouldReturnConsistentHashCode() {
- int hashCode = keyValue.hashCode();
- assertEquals(hashCode, keyValue.hashCode());
- }
-
- @Test
- public void toString_ShouldReturnCorrectStringRepresentation() {
- assertEquals("{\"key\":\"key\", \"value\":100}", keyValue.toString());
- }
-
-}
\ No newline at end of file
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/PairsTest.java b/src/test/java/com/igeeksky/xtool/core/function/tuple/PairsTest.java
deleted file mode 100644
index ca45818..0000000
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/PairsTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2021 Patrick.lau All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.igeeksky.xtool.core.function.tuple;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Patrick.Lau
- * @since 1.0.1 2021-11-20
- */
-public class PairsTest {
-
- @Test
- public void of() {
- Pair pair = Pairs.of("key", "value");
- Assertions.assertEquals("key", pair.key());
- Assertions.assertEquals("value", pair.value());
- }
-
- @Test
- public void emptyPair() {
- Pair pair = Pairs.emptyPair();
- Assertions.assertNull(pair.key());
- Assertions.assertNull(pair.value());
- }
-}
\ No newline at end of file
diff --git a/src/test/java/com/igeeksky/xtool/core/lang/ObjectUtilsTest.java b/src/test/java/com/igeeksky/xtool/core/lang/ObjectUtilsTest.java
new file mode 100644
index 0000000..3b1e9b5
--- /dev/null
+++ b/src/test/java/com/igeeksky/xtool/core/lang/ObjectUtilsTest.java
@@ -0,0 +1,247 @@
+package com.igeeksky.xtool.core.lang;
+
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class ObjectUtilsTest {
+
+ @Test
+ public void deepHashCode_NullObject_ReturnsZero() {
+ assertEquals(0, ObjectUtils.deepHashCode(null));
+ }
+
+ @Test
+ public void deepHashCode_NonArrayObject_ReturnsHashCode() {
+ Object obj = new Object();
+ assertEquals(obj.hashCode(), ObjectUtils.deepHashCode(obj));
+ }
+
+ @Test
+ public void deepHashCode_EmptyArrayObject_ReturnsHashCode() {
+ Object[] objArray = new Object[0];
+ assertEquals(Arrays.hashCode(objArray), ObjectUtils.deepHashCode(objArray));
+ }
+
+ @Test
+ public void deepHashcode_ObjectArray_ReturnsDeepHashCode() {
+ Object[] objArray = {new Object(), new Object()};
+ assertEquals(Arrays.deepHashCode(objArray), ObjectUtils.deepHashCode(objArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveByteArray_ReturnsHashCode() {
+ byte[] byteArray = {1, 2, 3};
+ assertEquals(Arrays.hashCode(byteArray), ObjectUtils.deepHashCode(byteArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveIntArray_ReturnsHashCode() {
+ int[] intArray = {1, 2, 3};
+ assertEquals(Arrays.hashCode(intArray), ObjectUtils.deepHashCode(intArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveLongArray_ReturnsHashCode() {
+ long[] longArray = {1L, 2L, 3L};
+ assertEquals(Arrays.hashCode(longArray), ObjectUtils.deepHashCode(longArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveCharArray_ReturnsHashCode() {
+ char[] charArray = {'a', 'b', 'c'};
+ assertEquals(Arrays.hashCode(charArray), ObjectUtils.deepHashCode(charArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveShortArray_ReturnsHashCode() {
+ short[] shortArray = {1, 2, 3};
+ assertEquals(Arrays.hashCode(shortArray), ObjectUtils.deepHashCode(shortArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveBooleanArray_ReturnsHashCode() {
+ boolean[] booleanArray = {true, false, true};
+ assertEquals(Arrays.hashCode(booleanArray), ObjectUtils.deepHashCode(booleanArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveDoubleArray_ReturnsHashCode() {
+ double[] doubleArray = {1.0, 2.0, 3.0};
+ assertEquals(Arrays.hashCode(doubleArray), ObjectUtils.deepHashCode(doubleArray));
+ }
+
+ @Test
+ public void deepHashCode_PrimitiveFloatArray_ReturnsHashCode() {
+ float[] floatArray = {1.0f, 2.0f, 3.0f};
+ assertEquals(Arrays.hashCode(floatArray), ObjectUtils.deepHashCode(floatArray));
+ }
+
+ @Test
+ public void deepEquals_SameReference_ReturnsTrue() {
+ Object obj = new Object();
+ assertTrue(ObjectUtils.deepEquals(obj, obj));
+ }
+
+ @Test
+ public void deepEquals_OneNull_ReturnsFalse() {
+ Object obj = new Object();
+ assertFalse(ObjectUtils.deepEquals(obj, null));
+ assertFalse(ObjectUtils.deepEquals(null, obj));
+ }
+
+ @Test
+ public void deepEquals_BothNull_ReturnsTrue() {
+ assertTrue(ObjectUtils.deepEquals(null, null));
+ }
+
+ @Test
+ public void deepEquals_EqualObj_ReturnsTrue() {
+ String str1 = new String("a".getBytes());
+ String str2 = new String("a".getBytes());
+ assertTrue(ObjectUtils.deepEquals(str1, str2));
+ }
+
+ @Test
+ public void deepEquals_DifferentObjects_ReturnsFalse() {
+ Object obj1 = new Object();
+ Object obj2 = new Object();
+ assertFalse(ObjectUtils.deepEquals(obj1, obj2));
+ }
+
+ @Test
+ public void deepEquals_DifferentObjectArrays_ReturnsFalse() {
+ Object[] objArray1 = {new Object(), new Object()};
+ Object[] objArray2 = {new Object(), new Object()};
+ assertFalse(ObjectUtils.deepEquals(objArray1, objArray2));
+ }
+
+ @Test
+ public void deepEquals_EqualPrimitiveArrays_ReturnsTrue() {
+ int[] intArray1 = {1, 2, 3};
+ int[] intArray2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(intArray1, intArray2));
+ }
+
+ @Test
+ public void deepEquals_DifferentPrimitiveArrays_ReturnsFalse() {
+ int[] intArray1 = {1, 2, 3};
+ int[] intArray2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(intArray1, intArray2));
+ }
+
+ @Test
+ public void deepEquals_EqualByteArrays_ReturnsTrue() {
+ byte[] array1 = {1, 2, 3};
+ byte[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentByteArrays_ReturnsFalse() {
+ byte[] array1 = {1, 2, 3};
+ byte[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualLongArrays_ReturnsTrue() {
+ long[] array1 = {1, 2, 3};
+ long[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentLongArrays_ReturnsFalse() {
+ long[] array1 = {1, 2, 3};
+ long[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualCharArrays_ReturnsTrue() {
+ char[] array1 = {1, 2, 3};
+ char[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentCharArrays_ReturnsFalse() {
+ char[] array1 = {1, 2, 3};
+ char[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualShortArrays_ReturnsTrue() {
+ short[] array1 = {1, 2, 3};
+ short[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentShortArrays_ReturnsFalse() {
+ short[] array1 = {1, 2, 3};
+ short[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualDoubleArrays_ReturnsTrue() {
+ double[] array1 = {1, 2, 3};
+ double[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentDoubleArrays_ReturnsFalse() {
+ double[] array1 = {1, 2, 3};
+ double[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualFloatArrays_ReturnsTrue() {
+ float[] array1 = {1, 2, 3};
+ float[] array2 = {1, 2, 3};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentFloatArrays_ReturnsFalse() {
+ float[] array1 = {1, 2, 3};
+ float[] array2 = {3, 2, 1};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_EqualBooleanArrays_ReturnsTrue() {
+ boolean[] array1 = {true, false, true};
+ boolean[] array2 = {true, false, true};
+ assertTrue(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentBooleanArrays_ReturnsFalse() {
+ boolean[] array1 = {false, true, false};
+ boolean[] array2 = {true, false, true};
+ assertFalse(ObjectUtils.deepEquals(array1, array2));
+ }
+
+ @Test
+ public void deepEquals_DifferentArrayTypes_ReturnsFalse() {
+ Object[] objArray = {new Object(), new Object()};
+ int[] intArray = {1, 2};
+ assertFalse(ObjectUtils.deepEquals(objArray, intArray));
+ }
+
+ @Test
+ public void deepEquals_MixedArrayTypes_ReturnsFalse() {
+ Object[] objArray = {new Object(), new Object()};
+ Object[] mixedArray = {new Object(), 1};
+ assertFalse(ObjectUtils.deepEquals(objArray, mixedArray));
+ }
+}
diff --git a/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie2Test.java b/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie2Test.java
index a6beb82..c39f7b2 100644
--- a/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie2Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrie2Test.java
@@ -17,8 +17,8 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
-import com.igeeksky.xtool.core.function.tuple.Tuples;
+import com.igeeksky.xtool.core.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuples;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -277,11 +277,11 @@ public void match() {
String text = "为什么不准发布?敏感词真敏感!";
List> match = trie.match(text);
- Assertions.assertEquals("[{\"start\":8, \"end\":10, \"key\":\"敏感词\", \"value\":\"敏感词\"}, {\"start\":12, \"end\":13, \"key\":\"敏感\", \"value\":\"敏感\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":8, \"end\":10, \"key\":\"敏感词\", \"value\":\"敏感词\"}, {\"begin\":12, \"end\":13, \"key\":\"敏感\", \"value\":\"敏感\"}]", match.toString());
// match 与 matchAll 对比,起始位置 8:contains只返回“敏感”;matchAll 返回了“敏感”和“敏感词”;
List> matchAll = trie.matchAll(text);
- Assertions.assertEquals("[{\"start\":8, \"end\":9, \"key\":\"敏感\", \"value\":\"敏感\"}, {\"start\":8, \"end\":10, \"key\":\"敏感词\", \"value\":\"敏感词\"}, {\"start\":12, \"end\":13, \"key\":\"敏感\", \"value\":\"敏感\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":8, \"end\":9, \"key\":\"敏感\", \"value\":\"敏感\"}, {\"begin\":8, \"end\":10, \"key\":\"敏感词\", \"value\":\"敏感词\"}, {\"begin\":12, \"end\":13, \"key\":\"敏感\", \"value\":\"敏感\"}]", matchAll.toString());
}
@@ -298,46 +298,46 @@ public void matchAndMatchAll() {
// match 与 matchAll 对比
List> match = trie.match("xxabcdexx");
- Assertions.assertEquals("[{\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"start\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"begin\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
List> matchAll = trie.matchAll("xxabcdexx");
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"start\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"begin\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", matchAll.toString());
// match 参数变化对比
// 最长匹配;逐字符扫描
match = trie.match("xxabcdexx", true, true);
- Assertions.assertEquals("[{\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"start\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"begin\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
// 最长匹配;跳过已匹配到的词,跳到已匹配到的词的下标 + 1 开始匹配
match = trie.match("xxabcdexx", true, false);
- Assertions.assertEquals("[{\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}]", match.toString());
// 最短匹配;逐字符扫描
match = trie.match("xxabcdexx", false, true);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", match.toString());
// 最短匹配;跳过已匹配到的词,跳到已匹配到的词的下标 + 1 开始匹配
match = trie.match("xxabcdexx", false, false);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", match.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", match.toString());
// matchAll 参数变化对比
// 逐字符扫描;最大返回数量为Integer.MAX_VALUE
matchAll = trie.matchAll("xxabcdexx", true, Integer.MAX_VALUE);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"start\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}, {\"begin\":3, \"end\":5, \"key\":\"bcd\", \"value\":\"bcd\"}]", matchAll.toString());
// 跳过已匹配到的词,跳到已匹配到的词的下标 + 1 开始匹配;最大返回数量为Integer.MAX_VALUE
matchAll = trie.matchAll("xxabcdexx", false, Integer.MAX_VALUE);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"start\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":4, \"key\":\"abc\", \"value\":\"abc\"}, {\"begin\":2, \"end\":5, \"key\":\"abcd\", \"value\":\"abcd\"}]", matchAll.toString());
// 逐字符扫描;最大返回数量为1
matchAll = trie.matchAll("xxabcdexx", true, 1);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", matchAll.toString());
// 跳过已匹配到的词,跳到已匹配到的词的下标 + 1 开始匹配;最大返回数量为1
matchAll = trie.matchAll("xxabcdexx", false, 1);
- Assertions.assertEquals("[{\"start\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", matchAll.toString());
+ Assertions.assertEquals("[{\"begin\":2, \"end\":3, \"key\":\"ab\", \"value\":\"ab\"}]", matchAll.toString());
}
@Test
diff --git a/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrieTest.java b/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrieTest.java
index 8e2f650..4e95de4 100644
--- a/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrieTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/nlp/ConcurrentHashTrieTest.java
@@ -17,8 +17,8 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
-import com.igeeksky.xtool.core.function.tuple.Tuples;
+import com.igeeksky.xtool.core.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuples;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -327,7 +327,7 @@ public void match() {
List> shortMatches = trie.match("abcdefg");
System.out.println(shortMatches);
- String expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
+ String expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
Assertions.assertEquals(expected, shortMatches.toString());
@@ -338,19 +338,19 @@ public void match() {
List> longMatches = trie.match("abcdefg", true, true);
System.out.println(longMatches);
- expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
+ expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
Assertions.assertEquals(expected, longMatches.toString());
List> skipMatches2 = trie.match("abcdefg", false, false);
System.out.println(skipMatches2);
- expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}]";
+ expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}]";
Assertions.assertEquals(expected, skipMatches2.toString());
List> skipMatches = trie.match("abcdefg", true, false);
System.out.println(skipMatches);
- expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
+ expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
Assertions.assertEquals(expected, skipMatches.toString());
}
@@ -370,7 +370,7 @@ public void matchAll() {
List> shortMatches = trie.matchAll("abcdefg");
System.out.println(shortMatches);
- String expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}, {\"start\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
+ String expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":1, \"end\":2, \"key\":\"bc\", \"value\":\"bc\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}, {\"begin\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
Assertions.assertEquals(expected, shortMatches.toString());
@@ -381,12 +381,12 @@ public void matchAll() {
List> shortMatches2 = trie.matchAll("abcdefg", false, Integer.MAX_VALUE);
System.out.println(shortMatches2);
- expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"start\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"start\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}, {\"start\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
+ expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}, {\"begin\":2, \"end\":3, \"key\":\"cd\", \"value\":\"cd\"}, {\"begin\":4, \"end\":5, \"key\":\"ef\", \"value\":\"ef\"}, {\"begin\":4, \"end\":6, \"key\":\"efg\", \"value\":\"efg\"}]";
Assertions.assertEquals(expected, shortMatches2.toString());
List> shortMatches3 = trie.matchAll("abcdefg", false, 1);
System.out.println(shortMatches3);
- expected = "[{\"start\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}]";
+ expected = "[{\"begin\":0, \"end\":1, \"key\":\"ab\", \"value\":\"ab\"}]";
Assertions.assertEquals(expected, shortMatches3.toString());
}
diff --git a/src/test/java/com/igeeksky/xtool/core/nlp/FoundTest.java b/src/test/java/com/igeeksky/xtool/core/nlp/FoundTest.java
index 2a2f4e1..6ecd763 100644
--- a/src/test/java/com/igeeksky/xtool/core/nlp/FoundTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/nlp/FoundTest.java
@@ -29,13 +29,13 @@ public class FoundTest {
@Test
public void getStart() {
Found found = new Found<>(0, 2, null, "ac");
- Assertions.assertEquals(0, found.getStart());
+ Assertions.assertEquals(0, found.begin());
}
@Test
public void getEnd() {
Found found = new Found<>(0, 2, null, "ac");
- Assertions.assertEquals(2, found.getEnd());
+ Assertions.assertEquals(2, found.end());
}
@Test
diff --git a/src/test/java/com/igeeksky/xtool/core/nlp/NodeTest.java b/src/test/java/com/igeeksky/xtool/core/nlp/NodeTest.java
index e59bf5f..a9b4b7e 100644
--- a/src/test/java/com/igeeksky/xtool/core/nlp/NodeTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/nlp/NodeTest.java
@@ -17,8 +17,8 @@
package com.igeeksky.xtool.core.nlp;
-import com.igeeksky.xtool.core.function.tuple.Tuple2;
-import com.igeeksky.xtool.core.function.tuple.Tuples;
+import com.igeeksky.xtool.core.tuple.Tuple2;
+import com.igeeksky.xtool.core.tuple.Tuples;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple1Test.java b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple1Test.java
similarity index 97%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple1Test.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/Tuple1Test.java
index 78c8b88..2a5bf1f 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple1Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple1Test.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple2Test.java b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple2Test.java
similarity index 98%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple2Test.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/Tuple2Test.java
index ceb7717..03e67cd 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple2Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple2Test.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple3Test.java b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple3Test.java
similarity index 98%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple3Test.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/Tuple3Test.java
index 04d37bf..0943059 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple3Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple3Test.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple4Test.java b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple4Test.java
similarity index 98%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple4Test.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/Tuple4Test.java
index dc9ae9d..51e064b 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple4Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple4Test.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple5Test.java b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple5Test.java
similarity index 98%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple5Test.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/Tuple5Test.java
index d7819f5..84418d5 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/Tuple5Test.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/Tuple5Test.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/igeeksky/xtool/core/function/tuple/TupleTest.java b/src/test/java/com/igeeksky/xtool/core/tuple/TupleTest.java
similarity index 95%
rename from src/test/java/com/igeeksky/xtool/core/function/tuple/TupleTest.java
rename to src/test/java/com/igeeksky/xtool/core/tuple/TupleTest.java
index 9d40e62..f6706eb 100644
--- a/src/test/java/com/igeeksky/xtool/core/function/tuple/TupleTest.java
+++ b/src/test/java/com/igeeksky/xtool/core/tuple/TupleTest.java
@@ -15,7 +15,7 @@
*/
-package com.igeeksky.xtool.core.function.tuple;
+package com.igeeksky.xtool.core.tuple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;