add method

This commit is contained in:
Looly 2022-03-30 01:23:48 +08:00
parent 0d9185a98d
commit 6427120482
7 changed files with 102 additions and 37 deletions

View File

@ -288,8 +288,10 @@ public class MapUtil {
* @param pairs 键值对
* @return Map
* @since 5.4.1
* @deprecated 方法容易歧义请使用 {@link #ofEntries(Entry[])}
*/
@SafeVarargs
@Deprecated
public static <K, V> Map<K, V> of(Pair<K, V>... pairs) {
final Map<K, V> map = new HashMap<>();
for (Pair<K, V> pair : pairs) {
@ -298,6 +300,25 @@ public class MapUtil {
return map;
}
/**
* 根据给定的Pair数组创建Map对象
*
* @param <K> 键类型
* @param <V> 值类型
* @param entries 键值对
* @return Map
* @see #entry(Object, Object)
* @since 5.8.0
*/
@SafeVarargs
public static <K, V> Map<K, V> ofEntries(Map.Entry<K, V>... entries) {
final Map<K, V> map = new HashMap<>();
for (Map.Entry<K, V> pair : entries) {
map.put(pair.getKey(), pair.getValue());
}
return map;
}
/**
* 将数组转换为MapHashMap支持数组元素类型为
*
@ -1382,4 +1403,36 @@ public class MapUtil {
}
return values;
}
/**
* 将键和值转换为{@link AbstractMap.SimpleImmutableEntry}<br>
* 返回的Entry不可变
*
* @param key
* @param value
* @param <K> 键类型
* @param <V> 值类型
* @return {@link AbstractMap.SimpleImmutableEntry}
* @since 5.8.0
*/
public static <K, V> Map.Entry<K, V> entry(K key, V value) {
return entry(key, value, true);
}
/**
* 将键和值转换为{@link AbstractMap.SimpleEntry} 或者 {@link AbstractMap.SimpleImmutableEntry}
*
* @param key
* @param value
* @param <K> 键类型
* @param <V> 值类型
* @param isImmutable 是否不可变Entry
* @return {@link AbstractMap.SimpleEntry} 或者 {@link AbstractMap.SimpleImmutableEntry}
* @since 5.8.0
*/
public static <K, V> Map.Entry<K, V> entry(K key, V value, boolean isImmutable) {
return isImmutable ?
new AbstractMap.SimpleEntry<>(key, value) :
new AbstractMap.SimpleImmutableEntry<>(key, value);
}
}

View File

@ -1,31 +0,0 @@
package cn.hutool.core.map;
/**
* {@link java.util.Map.Entry}简单实现<br>
* 键值对使用不可变字段表示
*
* @param <K> 键类型
* @param <V> 值类型
* @author looly
* @since 5.7.23
*/
public class SimpleEntry<K, V> extends AbsEntry<K, V> {
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;
}
}

View File

@ -172,7 +172,7 @@ public class TableMap<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Ser
public Set<Map.Entry<K, V>> entrySet() {
final Set<Map.Entry<K, V>> 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<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Ser
@Override
public Map.Entry<K, V> next() {
return new SimpleEntry<>(keysIter.next(), valuesIter.next());
return MapUtil.entry(keysIter.next(), valuesIter.next());
}
@Override

View File

@ -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<R, C, V> extends AbsTable<R, C, V> {
@Override
public Iterator<Map.Entry<C, Map<R, V>>> iterator() {
return new TransIter<>(columnKeySet.iterator(),
c -> new SimpleEntry<>(c, getColumn(c)));
c -> MapUtil.entry(c, getColumn(c)));
}
@Override

View File

@ -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<String, Integer> 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"));
}
}

View File

@ -1323,7 +1323,8 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
// -------------------------------------------------------------------------- Private method start
/**
* 为指定的key列表添加标题别名如果没有定义key的别名在onlyAlias为false时使用原key
* 为指定的key列表添加标题别名如果没有定义key的别名在onlyAlias为false时使用原key<br>
* key为别名value为字段值
*
* @param rowMap 一行数据
* @return 别名列表

View File

@ -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<Map<Object, Object>> data = ListUtil.of(
MapUtil.ofEntries(MapUtil.entry("androidLc", "1次"), MapUtil.entry("androidAc", "3人")),
MapUtil.ofEntries(MapUtil.entry("androidLc", "1次"), MapUtil.entry("androidAc", "3人"))
);
}
}