当前位置:网站首页>Guava中这些Map的骚操作,让我的代码量减少了50%
Guava中这些Map的骚操作,让我的代码量减少了50%
2022-06-24 19:28:00 【InfoQ】
Map<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
Table - 双键Map
MapkeyvalueTablevaluekeyTablekeyrowKeycolumnKeyMapMap<String,Map<String,Integer>> map=new HashMap<>();
//存放元素
Map<String,Integer> workMap=new HashMap<>();
workMap.put("Jan",20);
workMap.put("Feb",28);
map.put("Hydra",workMap);
//取出元素
Integer dayCount = map.get("Hydra").get("Jan");
TableTable<String,String,Integer> table= HashBasedTable.create();
//存放元素
table.put("Hydra", "Jan", 20);
table.put("Hydra", "Feb", 28);
table.put("Trunks", "Jan", 28);
table.put("Trunks", "Feb", 16);
//取出元素
Integer dayCount = table.get("Hydra", "Feb");
Map1、获得key或value的集合
//rowKey或columnKey的集合
Set<String> rowKeys = table.rowKeySet();
Set<String> columnKeys = table.columnKeySet();
//value集合
Collection<Integer> values = table.values();
keyvalue[Hydra, Trunks]
[Jan, Feb]
[20, 28, 28, 16]
2、计算key对应的所有value的和
rowKeyvaluefor (String key : table.rowKeySet()) {
Set<Map.Entry<String, Integer>> rows = table.row(key).entrySet();
int total = 0;
for (Map.Entry<String, Integer> row : rows) {
total += row.getValue();
}
System.out.println(key + ": " + total);
}
Hydra: 48
Trunks: 44
3、转换rowKey和columnKey
TablestransposeTable<String, String, Integer> table2 = Tables.transpose(table);
Set<Table.Cell<String, String, Integer>> cells = table2.cellSet();
cells.forEach(cell->
System.out.println(cell.getRowKey()+","+cell.getColumnKey()+":"+cell.getValue())
);
cellSetrowcolumnJan,Hydra:20
Feb,Hydra:28
Jan,Trunks:28
Feb,Trunks:16
4、转为嵌套的Map
TableMapTablerowMapcolumnMapMap<String, Map<String, Integer>> rowMap = table.rowMap();
Map<String, Map<String, Integer>> columnMap = table.columnMap();
Map{Hydra={Jan=20, Feb=28}, Trunks={Jan=28, Feb=16}}
{Jan={Hydra=20, Trunks=28}, Feb={Hydra=28, Trunks=16}}
BiMap - 双向Map
MapvaluekeyforMapkeySetpublic List<String> findKey(Map<String, String> map, String val){
List<String> keys=new ArrayList<>();
for (String key : map.keySet()) {
if (map.get(key).equals(val))
keys.add(key);
}
return keys;
}
BiMapkeyvalueHashBiMap<String, String> biMap = HashBiMap.create();
biMap.put("Hydra","Programmer");
biMap.put("Tony","IronMan");
biMap.put("Thanos","Titan");
//使用key获取value
System.out.println(biMap.get("Tony"));
BiMap<String, String> inverse = biMap.inverse();
//使用value获取key
System.out.println(inverse.get("Titan"));
IronMan
Thanos
1、反转后操作的影响
inverseBiMapBiMapBiMapBiMapHashBiMap<String, String> biMap = HashBiMap.create();
biMap.put("Hydra","Programmer");
biMap.put("Tony","IronMan");
biMap.put("Thanos","Titan");
BiMap<String, String> inverse = biMap.inverse();
inverse.put("IronMan","Stark");
System.out.println(biMap);
BiMapBiMap{Hydra=Programmer, Thanos=Titan, Stark=IronMan}
IronManTonyStark2、value不可重复
BiMapMapMapkeyBiMapkeyvaluevalueHashBiMap<String, String> biMap = HashBiMap.create();
biMap.put("Tony","IronMan");
biMap.put("Stark","IronMan");
IllegalArgumentException
keyvalueforcePutkeyHashBiMap<String, String> biMap = HashBiMap.create();
biMap.put("Tony","IronMan");
biMap.forcePut("Stark","IronMan");
BiMap{Stark=IronMan}
BiMapvaluevaluesSetCollectionSet<String> values = biMap.values();
Multimap - 多值Map
MapMap<String, List<Integer>> map=new HashMap<>();
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
map.put("day",list);
MultimapMapMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.put("day",1);
multimap.put("day",2);
multimap.put("day",8);
multimap.put("month",3);
Multimapkey{month=[3], day=[1, 2, 8]}
1、获取值的集合
Multimapget(key)CollectionCollection<Integer> day = multimap.get("day");
ArrayListMultimapgetListArrayListMultimap<String, Integer> multimap = ArrayListMultimap.create();
List<Integer> day = multimap.get("day");
HashMultimapTreeMultimapMultimapMultimapgetnullList<Integer> day = multimap.get("day");
List<Integer> year = multimap.get("year");
System.out.println(day);
System.out.println(year);
[1, 2, 8]
[]
2、操作get后的集合
BiMapgetMultimapArrayListMultimap<String, Integer> multimap = ArrayListMultimap.create();
multimap.put("day",1);
multimap.put("day",2);
multimap.put("day",8);
multimap.put("month",3);
List<Integer> day = multimap.get("day");
List<Integer> month = multimap.get("month");
day.remove(0);//这个0是下标
month.add(12);
System.out.println(multimap);
{month=[3, 12], day=[2, 8]}
3、转换为Map
asMapMultimapMap<K,Collection>MapMapMultimapMap<String, Collection<Integer>> map = multimap.asMap();
for (String key : map.keySet()) {
System.out.println(key+" : "+map.get(key));
}
map.get("day").add(20);
System.out.println(multimap);
month : [3]
day : [1, 2, 8]
{month=[3], day=[1, 2, 8, 20]}
4、数量问题
MultimapSystem.out.println(multimap.size());
System.out.println(multimap.entries().size());
for (Map.Entry<String, Integer> entry : multimap.entries()) {
System.out.println(entry.getKey()+","+entry.getValue());
}
4
4
month,3
day,1
day,2
day,8
size()keyvalueentries()keyvaluekeySetkeySystem.out.println(multimap.keySet().size());
MapSet<Map.Entry<String, Collection<Integer>>> entries = multimap.asMap().entrySet();
System.out.println(entries.size());
keyCollectionRangeMap - 范围Map
if-elsepublic static String getRank(int score){
if (0<=score && score<60)
return "fail";
else if (60<=score && score<=90)
return "satisfactory";
else if (90<score && score<=100)
return "excellent";
return null;
}
RangeMapRangeMapRangeMap<Integer, String> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closedOpen(0,60),"fail");
rangeMap.put(Range.closed(60,90),"satisfactory");
rangeMap.put(Range.openClosed(90,100),"excellent");
System.out.println(rangeMap.get(59));
System.out.println(rangeMap.get(60));
System.out.println(rangeMap.get(90));
System.out.println(rangeMap.get(91));
[0,60)[60,90](90,100]fail
satisfactory
satisfactory
excellent
[70,80]getnullrangeMap.remove(Range.closed(70,80));
System.out.println(rangeMap.get(75));
ClassToInstanceMap - 实例Map
ClassToInstanceMapMapClassClassputInstanceClassToInstanceMap<Object> instanceMap = MutableClassToInstanceMap.create();
User user=new User("Hydra",18);
Dept dept=new Dept("develop",200);
instanceMap.putInstance(User.class,user);
instanceMap.putInstance(Dept.class,dept);
getInstanceUser user1 = instanceMap.getInstance(User.class);
System.out.println(user==user1);
trueMap<Class,Object>Map<Class,Object> map=new HashMap<>();
User user=new User("Hydra",18);
Dept dept=new Dept("develop",200);
map.put(User.class,user);
map.put(Dept.class,dept);
ClassToInstanceMapClassToInstanceMappublic interface ClassToInstanceMap<B> extends Map<Class<? extends B>, B>{...}
valuekeyClassToInstanceMap<Map> instanceMap = MutableClassToInstanceMap.create();
HashMap<String, Object> hashMap = new HashMap<>();
TreeMap<String, Object> treeMap = new TreeMap<>();
ArrayList<Object> list = new ArrayList<>();
instanceMap.putInstance(HashMap.class,hashMap);
instanceMap.putInstance(TreeMap.class,treeMap);
HashMapTreeMapMap
ClassToInstanceMap总结
Map边栏推荐
- 在每个树行中找最大值[分层遍历之一的扩展]
- Blender FAQs
- Unity关于本地坐标和世界坐标之间的转换
- Structured interview of state-owned enterprises and central enterprises employment of state-owned enterprises Modou Interactive Employment Service steward
- 煮茶论英雄!福建省发改委、市营商办领导一行莅临育润大健康事业部交流指导
- Implementing DNS requester with C language
- [product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial
- Implementation of adjacency table storage array of graph
- 02---纵波不可能产生的现象
- Analyse complète Memcached – 2. Comprendre le stockage de mémoire pour Memcached
猜你喜欢

VirtualBox virtual machine installation win10 Enterprise Edition

我国SaaS产业的发展趋势与路径

Make tea and talk about heroes! Leaders of Fujian Provincial Development and Reform Commission and Fujian municipal business office visited Yurun Health Division for exchange and guidance

EasyBypass

【吴恩达笔记】卷积神经网络

ping: www.baidu. Com: unknown name or service

About transform InverseTransformPoint, transform. InverseTransofrmDirection

平衡二叉搜索树

将二维数组方阵顺时针旋转90°

Multiplexer select
随机推荐
Tso hardware sharding is a header copy problem
Unity about conversion between local and world coordinates
LeetCode-513. 找树左下角的值
【吴恩达笔记】卷积神经网络
Interpretation of ebpf sockops code
【吴恩达笔记】多变量线性回归
About transform InverseTransformPoint, transform. InverseTransofrmDirection
The collection of zero code enterprise application cases in various industries was officially released
如何做到全彩户外LED显示屏节能环保
Understanding openstack network
socket(1)
Multi view function in blender
TKKC round#3
leetcode_1365
SYSCALL_ Define5 setsockopt code flow
Installing Oracle without graphical interface in virtual machine centos7 (nanny level installation)
memcached全面剖析–2. 理解memcached的內存存儲
关于Unity中的transform.InverseTransformPoint, transform.InverseTransofrmDirection
并查集+建图
Object.defineProperty和Reflect.defineProperty的容错问题