From 3bddce1a0bc96ad4b5768205fa3146fe11ce1fb3 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 31 Aug 2022 00:53:20 +0800 Subject: [PATCH] fix doc --- .../core/map/multi/AbsCollValueMap.java | 2 +- .../hutool/core/map/multi/MultiValueMap.java | 20 ++++++++++++++++-- .../hutool/core/map/multi/package-info.java | 21 ++++++++++++++++++- .../hutool/http/server/HttpServerRequest.java | 5 ++--- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/multi/AbsCollValueMap.java b/hutool-core/src/main/java/cn/hutool/core/map/multi/AbsCollValueMap.java index 9c0e960d1..f43841f8b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/multi/AbsCollValueMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/multi/AbsCollValueMap.java @@ -20,6 +20,7 @@ import java.util.stream.Collectors; * @param 值类型 * @author looly * @since 5.7.4 + * @see CollectionValueMap * @see SetValueMap * @see ListValueMap */ @@ -60,7 +61,6 @@ public abstract class AbsCollValueMap extends MapWrapper> // ------------------------------------------------------------------------- Constructor end - /** * 将集合中的全部元素对追加到指定键对应的值集合中,效果等同于: *
{@code
diff --git a/hutool-core/src/main/java/cn/hutool/core/map/multi/MultiValueMap.java b/hutool-core/src/main/java/cn/hutool/core/map/multi/MultiValueMap.java
index 684d83a54..e7af04b7e 100644
--- a/hutool-core/src/main/java/cn/hutool/core/map/multi/MultiValueMap.java
+++ b/hutool-core/src/main/java/cn/hutool/core/map/multi/MultiValueMap.java
@@ -11,13 +11,13 @@ import java.util.stream.Collectors;
  * 

一个键对应多个值的集合{@link Map}实现,提供针对键对应的值集合中的元素而非值集合本身的一些快捷操作, * 本身可作为一个值为{@link Collection}类型的{@link Map}使用。
* - *

值集合类型

+ *

值集合类型

*

值集合的类型由接口的实现类自行维护,当通过{@link MultiValueMap}定义的方法进行增删改操作时, * 实现类应保证通过通过实例方法获得的集合类型都一致。但是若用户直接通过{@link Map}定义的方法进行增删改操作时, * 实例无法保证通过实例方法获得的集合类型都一致。
* 因此,若无必要则更推荐通过{@link MultiValueMap}定义的方法进行操作。 * - *

对值集合的修改

+ *

对值集合的修改

*

当通过实例方法获得值集合时,若该集合允许修改,则对值集合的修改将会影响到其所属的{@link MultiValueMap}实例,反之亦然。 * 因此当同时遍历当前实例或者值集合时,若存在写操作,则需要注意可能引发的{@link ConcurrentModificationException}。 * @@ -40,6 +40,7 @@ public interface MultiValueMap extends Map> { * @param value 键对应的新值集合 * @return 旧值集合 */ + @SuppressWarnings("AbstractMethodOverridesAbstractMethod") @Override Collection put(K key, Collection value); @@ -49,6 +50,7 @@ public interface MultiValueMap extends Map> { * * @param map 需要更新的键值对集合 */ + @SuppressWarnings("AbstractMethodOverridesAbstractMethod") @Override void putAll(Map> map); @@ -100,6 +102,7 @@ public interface MultiValueMap extends Map> { * @param values 待添加的值 * @return boolean */ + @SuppressWarnings("unchecked") default boolean putValues(final K key, final V... values) { return ArrayUtil.isNotEmpty(values) && putAllValues(key, Arrays.asList(values)); } @@ -138,6 +141,7 @@ public interface MultiValueMap extends Map> { * @param values 值数组 * @return 是否成功删除 */ + @SuppressWarnings("unchecked") default boolean removeValues(final K key, final V... values) { return ArrayUtil.isNotEmpty(values) && removeAllValues(key, Arrays.asList(values)); } @@ -189,6 +193,18 @@ public interface MultiValueMap extends Map> { // =================== read operate =================== + /** + * 获取指定序号的值,若值不存在,返回{@code null} + * + * @param key 键 + * @param index 第几个值的索引,越界返回null + * @return 值或null + */ + default V getValue(K key, int index) { + final Collection collection = get(key); + return CollUtil.get(collection, index); + } + /** * 获取键对应的值,若值不存在,则返回{@link Collections#emptyList()}。效果等同于: *

{@code
diff --git a/hutool-core/src/main/java/cn/hutool/core/map/multi/package-info.java b/hutool-core/src/main/java/cn/hutool/core/map/multi/package-info.java
index 2bf5b685f..25b130d0d 100644
--- a/hutool-core/src/main/java/cn/hutool/core/map/multi/package-info.java
+++ b/hutool-core/src/main/java/cn/hutool/core/map/multi/package-info.java
@@ -1,5 +1,24 @@
 /**
- * 多参数类型的Map实现,包括集合类型值的Map和Table
+ * 多参数类型的Map实现,包括集合类型值的MultiValueMap和Table
+ *
    + *
  • MultiValueMap:一个键对应多个值的集合的实现,类似于树的结构。
  • + *
  • Table:使用两个键映射到一个值,类似于表格结构。
  • + *
+ * + *
+ *                   MultiValueMap
+ *                         |
+ *                   AbsCollValueMap
+ *                         ||
+ *   [CollectionValueMap, SetValueMap, ListValueMap]
+ * 
+ *
+ *                       Table
+ *                         |
+ *                      AbsTable
+ *                         ||
+ *                    [RowKeyTable]
+ * 
* * @author looly * diff --git a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerRequest.java b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerRequest.java index c39cb67eb..155d2c301 100644 --- a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerRequest.java +++ b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerRequest.java @@ -25,7 +25,6 @@ import java.net.HttpCookie; import java.net.URI; import java.nio.charset.Charset; import java.util.Collection; -import java.util.List; import java.util.Map; /** @@ -303,7 +302,7 @@ public class HttpServerRequest extends HttpServerBase { * @since 5.5.8 */ public String getParam(final String name){ - return getParams().get(name, 0); + return getParams().getValue(name, 0); } /** @@ -313,7 +312,7 @@ public class HttpServerRequest extends HttpServerBase { * @return 参数值 * @since 5.5.8 */ - public List getParams(final String name){ + public Collection getParams(final String name){ return getParams().get(name); }