This commit is contained in:
Looly
2022-04-24 14:21:20 +08:00
parent 37f53e9856
commit ca03fb3411
6 changed files with 130 additions and 6 deletions

View File

@@ -27,9 +27,18 @@ import java.util.Set;
public class TableMap<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Serializable {
private static final long serialVersionUID = 1L;
private static final int DEFAULT_CAPACITY = 10;
private final List<K> keys;
private final List<V> values;
/**
* 构造
*/
public TableMap() {
this(DEFAULT_CAPACITY);
}
/**
* 构造
*
@@ -85,11 +94,12 @@ public class TableMap<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Ser
/**
* 根据value获得对应的key只返回找到的第一个value对应的key值
*
* @param value 值
* @return 键
* @since 5.3.3
*/
public K getKey(V value){
public K getKey(V value) {
final int index = values.indexOf(value);
if (index > -1 && index < keys.size()) {
return keys.get(index);
@@ -160,7 +170,17 @@ public class TableMap<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, Ser
@Override
public Set<K> keySet() {
return new HashSet<>(keys);
return new HashSet<>(this.keys);
}
/**
* 获取所有键,可重复,不可修改
*
* @return 键列表
* @since 5.8.0
*/
public List<K> keys() {
return Collections.unmodifiableList(this.keys);
}
@Override

View File

@@ -9,8 +9,11 @@ import cn.hutool.core.map.MapUtil;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -198,6 +201,15 @@ public class RowKeyTable<R, C, V> extends AbsTable<R, C, V> {
//endregion
//region getColumn
@Override
public List<C> columnKeys() {
final Collection<Map<C, V>> values = this.raw.values();
final List<C> result = new ArrayList<>(values.size() * 16);
for (Map<C, V> map : values) {
map.forEach((key, value)->{result.add(key);});
}
return result;
}
@Override
public Map<R, V> getColumn(C columnKey) {

View File

@@ -1,10 +1,13 @@
package cn.hutool.core.map.multi;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.lang.Opt;
import cn.hutool.core.lang.func.Consumer3;
import cn.hutool.core.map.MapUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -101,6 +104,25 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
return Opt.ofNullable(columnMap()).map(Map::keySet).get();
}
/**
* 返回所有列的key列的key如果实现Map是可重复key则返回对应不去重的List。
*
* @return 列set
* @since 5.8.0
*/
default List<C> columnKeys() {
final Map<C, Map<R, V>> columnMap = columnMap();
if(MapUtil.isEmpty(columnMap)){
return ListUtil.empty();
}
final List<C> result = new ArrayList<>(columnMap.size());
for (Map.Entry<C, Map<R, V>> cMapEntry : columnMap.entrySet()) {
result.add(cMapEntry.getKey());
}
return result;
}
/**
* 返回列-行对应的map
*