mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
add method
This commit is contained in:
parent
0d9185a98d
commit
6427120482
@ -288,8 +288,10 @@ public class MapUtil {
|
|||||||
* @param pairs 键值对
|
* @param pairs 键值对
|
||||||
* @return Map
|
* @return Map
|
||||||
* @since 5.4.1
|
* @since 5.4.1
|
||||||
|
* @deprecated 方法容易歧义,请使用 {@link #ofEntries(Entry[])}
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
|
@Deprecated
|
||||||
public static <K, V> Map<K, V> of(Pair<K, V>... pairs) {
|
public static <K, V> Map<K, V> of(Pair<K, V>... pairs) {
|
||||||
final Map<K, V> map = new HashMap<>();
|
final Map<K, V> map = new HashMap<>();
|
||||||
for (Pair<K, V> pair : pairs) {
|
for (Pair<K, V> pair : pairs) {
|
||||||
@ -298,6 +300,25 @@ public class MapUtil {
|
|||||||
return map;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将数组转换为Map(HashMap),支持数组元素类型为:
|
* 将数组转换为Map(HashMap),支持数组元素类型为:
|
||||||
*
|
*
|
||||||
@ -1382,4 +1403,36 @@ public class MapUtil {
|
|||||||
}
|
}
|
||||||
return values;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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() {
|
public Set<Map.Entry<K, V>> entrySet() {
|
||||||
final Set<Map.Entry<K, V>> hashSet = new LinkedHashSet<>();
|
final Set<Map.Entry<K, V>> hashSet = new LinkedHashSet<>();
|
||||||
for (int i = 0; i < size(); i++) {
|
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;
|
return hashSet;
|
||||||
}
|
}
|
||||||
@ -190,7 +190,7 @@ public class TableMap<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Ser
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map.Entry<K, V> next() {
|
public Map.Entry<K, V> next() {
|
||||||
return new SimpleEntry<>(keysIter.next(), valuesIter.next());
|
return MapUtil.entry(keysIter.next(), valuesIter.next());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,7 +5,7 @@ import cn.hutool.core.collection.ComputeIter;
|
|||||||
import cn.hutool.core.collection.IterUtil;
|
import cn.hutool.core.collection.IterUtil;
|
||||||
import cn.hutool.core.collection.TransIter;
|
import cn.hutool.core.collection.TransIter;
|
||||||
import cn.hutool.core.map.AbsEntry;
|
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.AbstractMap;
|
||||||
import java.util.AbstractSet;
|
import java.util.AbstractSet;
|
||||||
@ -130,7 +130,7 @@ public class RowKeyTable<R, C, V> extends AbsTable<R, C, V> {
|
|||||||
@Override
|
@Override
|
||||||
public Iterator<Map.Entry<C, Map<R, V>>> iterator() {
|
public Iterator<Map.Entry<C, Map<R, V>>> iterator() {
|
||||||
return new TransIter<>(columnKeySet.iterator(),
|
return new TransIter<>(columnKeySet.iterator(),
|
||||||
c -> new SimpleEntry<>(c, getColumn(c)));
|
c -> MapUtil.entry(c, getColumn(c)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,7 +8,12 @@ import lombok.Data;
|
|||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
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.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@ -201,4 +206,13 @@ public class MapUtilTest {
|
|||||||
String join3 = MapUtil.sortJoin(build, StrUtil.EMPTY, StrUtil.EMPTY, false, "123", "abc");
|
String join3 = MapUtil.sortJoin(build, StrUtil.EMPTY, StrUtil.EMPTY, false, "123", "abc");
|
||||||
Assert.assertEquals("key1value1key2value2key3value3123abc", join3);
|
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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1323,7 +1323,8 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
|
|||||||
// -------------------------------------------------------------------------- Private method start
|
// -------------------------------------------------------------------------- Private method start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 为指定的key列表添加标题别名,如果没有定义key的别名,在onlyAlias为false时使用原key
|
* 为指定的key列表添加标题别名,如果没有定义key的别名,在onlyAlias为false时使用原key<br>
|
||||||
|
* key为别名,value为字段值
|
||||||
*
|
*
|
||||||
* @param rowMap 一行数据
|
* @param rowMap 一行数据
|
||||||
* @return 别名列表
|
* @return 别名列表
|
||||||
|
@ -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人"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user