From 6427120482e5d91e469f13f55a4deaf5367d1835 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 30 Mar 2022 01:23:48 +0800 Subject: [PATCH] add method --- .../main/java/cn/hutool/core/map/MapUtil.java | 53 +++++++++++++++++++ .../java/cn/hutool/core/map/SimpleEntry.java | 31 ----------- .../java/cn/hutool/core/map/TableMap.java | 4 +- .../cn/hutool/core/map/multi/RowKeyTable.java | 4 +- .../java/cn/hutool/core/map/MapUtilTest.java | 16 +++++- .../java/cn/hutool/poi/excel/ExcelWriter.java | 3 +- .../cn/hutool/poi/excel/Issue2221Test.java | 28 ++++++++++ 7 files changed, 102 insertions(+), 37 deletions(-) delete mode 100644 hutool-core/src/main/java/cn/hutool/core/map/SimpleEntry.java create mode 100644 hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2221Test.java diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index ebd44497e..7b235fa49 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -288,8 +288,10 @@ public class MapUtil { * @param pairs 键值对 * @return Map * @since 5.4.1 + * @deprecated 方法容易歧义,请使用 {@link #ofEntries(Entry[])} */ @SafeVarargs + @Deprecated public static Map of(Pair... pairs) { final Map map = new HashMap<>(); for (Pair pair : pairs) { @@ -298,6 +300,25 @@ public class MapUtil { return map; } + /** + * 根据给定的Pair数组创建Map对象 + * + * @param 键类型 + * @param 值类型 + * @param entries 键值对 + * @return Map + * @see #entry(Object, Object) + * @since 5.8.0 + */ + @SafeVarargs + public static Map ofEntries(Map.Entry... entries) { + final Map map = new HashMap<>(); + for (Map.Entry pair : entries) { + map.put(pair.getKey(), pair.getValue()); + } + return map; + } + /** * 将数组转换为Map(HashMap),支持数组元素类型为: * @@ -1382,4 +1403,36 @@ public class MapUtil { } return values; } + + /** + * 将键和值转换为{@link AbstractMap.SimpleImmutableEntry}
+ * 返回的Entry不可变 + * + * @param key 键 + * @param value 值 + * @param 键类型 + * @param 值类型 + * @return {@link AbstractMap.SimpleImmutableEntry} + * @since 5.8.0 + */ + public static Map.Entry entry(K key, V value) { + return entry(key, value, true); + } + + /** + * 将键和值转换为{@link AbstractMap.SimpleEntry} 或者 {@link AbstractMap.SimpleImmutableEntry} + * + * @param key 键 + * @param value 值 + * @param 键类型 + * @param 值类型 + * @param isImmutable 是否不可变Entry + * @return {@link AbstractMap.SimpleEntry} 或者 {@link AbstractMap.SimpleImmutableEntry} + * @since 5.8.0 + */ + public static Map.Entry entry(K key, V value, boolean isImmutable) { + return isImmutable ? + new AbstractMap.SimpleEntry<>(key, value) : + new AbstractMap.SimpleImmutableEntry<>(key, value); + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/SimpleEntry.java b/hutool-core/src/main/java/cn/hutool/core/map/SimpleEntry.java deleted file mode 100644 index e414636c0..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/map/SimpleEntry.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hutool.core.map; - -/** - * {@link java.util.Map.Entry}简单实现。
- * 键值对使用不可变字段表示。 - * - * @param 键类型 - * @param 值类型 - * @author looly - * @since 5.7.23 - */ -public class SimpleEntry extends AbsEntry { - - private final K key; - private final V value; - - public SimpleEntry(K key, V value) { - this.key = key; - this.value = value; - } - - @Override - public K getKey() { - return key; - } - - @Override - public V getValue() { - return value; - } -} diff --git a/hutool-core/src/main/java/cn/hutool/core/map/TableMap.java b/hutool-core/src/main/java/cn/hutool/core/map/TableMap.java index 783f1e98a..f397b043a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/TableMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/TableMap.java @@ -172,7 +172,7 @@ public class TableMap implements Map, Iterable>, Ser public Set> entrySet() { final Set> hashSet = new LinkedHashSet<>(); for (int i = 0; i < size(); i++) { - hashSet.add(new SimpleEntry<>(keys.get(i), values.get(i))); + hashSet.add(MapUtil.entry(keys.get(i), values.get(i))); } return hashSet; } @@ -190,7 +190,7 @@ public class TableMap implements Map, Iterable>, Ser @Override public Map.Entry next() { - return new SimpleEntry<>(keysIter.next(), valuesIter.next()); + return MapUtil.entry(keysIter.next(), valuesIter.next()); } @Override diff --git a/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java b/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java index 6094300ac..ff508e8b2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/multi/RowKeyTable.java @@ -5,7 +5,7 @@ import cn.hutool.core.collection.ComputeIter; import cn.hutool.core.collection.IterUtil; import cn.hutool.core.collection.TransIter; import cn.hutool.core.map.AbsEntry; -import cn.hutool.core.map.SimpleEntry; +import cn.hutool.core.map.MapUtil; import java.util.AbstractMap; import java.util.AbstractSet; @@ -130,7 +130,7 @@ public class RowKeyTable extends AbsTable { @Override public Iterator>> iterator() { return new TransIter<>(columnKeySet.iterator(), - c -> new SimpleEntry<>(c, getColumn(c))); + c -> MapUtil.entry(c, getColumn(c))); } @Override diff --git a/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java index e1aed546e..876e31446 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/MapUtilTest.java @@ -8,7 +8,12 @@ import lombok.Data; import org.junit.Assert; import org.junit.Test; -import java.util.*; +import java.util.ArrayDeque; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Queue; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -201,4 +206,13 @@ public class MapUtilTest { String join3 = MapUtil.sortJoin(build, StrUtil.EMPTY, StrUtil.EMPTY, false, "123", "abc"); Assert.assertEquals("key1value1key2value2key3value3123abc", join3); } + + @Test + public void ofEntriesTest(){ + final Map map = MapUtil.ofEntries(MapUtil.entry("a", 1), MapUtil.entry("b", 2)); + Assert.assertEquals(2, map.size()); + + Assert.assertEquals(Integer.valueOf(1), map.get("a")); + Assert.assertEquals(Integer.valueOf(2), map.get("b")); + } } diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java index f7fafff34..1448f528c 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java @@ -1323,7 +1323,8 @@ public class ExcelWriter extends ExcelBase { // -------------------------------------------------------------------------- Private method start /** - * 为指定的key列表添加标题别名,如果没有定义key的别名,在onlyAlias为false时使用原key + * 为指定的key列表添加标题别名,如果没有定义key的别名,在onlyAlias为false时使用原key
+ * key为别名,value为字段值 * * @param rowMap 一行数据 * @return 别名列表 diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2221Test.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2221Test.java new file mode 100644 index 000000000..80e9090c6 --- /dev/null +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2221Test.java @@ -0,0 +1,28 @@ +package cn.hutool.poi.excel; + +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.List; +import java.util.Map; + +public class Issue2221Test { + + @Test + @Ignore + public void writeDuplicateHeaderAliasTest(){ + final ExcelWriter writer = ExcelUtil.getWriter(); + // 设置别名 + writer.addHeaderAlias("androidLc", "安卓"); + writer.addHeaderAlias("androidAc", "安卓"); + writer.setOnlyAlias(true); + + // 写入数据 + List> data = ListUtil.of( + MapUtil.ofEntries(MapUtil.entry("androidLc", "1次"), MapUtil.entry("androidAc", "3人")), + MapUtil.ofEntries(MapUtil.entry("androidLc", "1次"), MapUtil.entry("androidAc", "3人")) + ); + } +}