当前位置:网站首页>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边栏推荐
- Unity关于本地坐标和世界坐标之间的转换
- Structured interview of state-owned enterprises and central enterprises employment of state-owned enterprises Modou Interactive Employment Service steward
- Memcached comprehensive analysis – 2 Understand memcached memory storage
- Docking of arkit and character creator animation curves
- 心楼:华为运动健康的七年筑造之旅
- 我国SaaS产业的发展趋势与路径
- C语言-关键字1
- 应用实践 | 海量数据,秒级分析!Flink+Doris 构建实时数仓方案
- 基于kruskal的最小生成树
- 66 pitfalls in go programming language: pitfalls and common errors of golang developers
猜你喜欢
![[product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial](/img/0f/e0b261496d04ca3da8a7d7d19e5bf1.png)
[product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial

Sslhandshakeexception: no subject alternative names present - sslhandshakeexception: no subject alternative names present

【吴恩达笔记】机器学习基础

Redis+Caffeine两级缓存,让访问速度纵享丝滑

【论】A deep-learning model for urban traffic flow prediction with traffic events mined from twitter

C语言-关键字1

如何做到全彩户外LED显示屏节能环保

二叉搜索树模板

应用实践 | 海量数据,秒级分析!Flink+Doris 构建实时数仓方案

AntDB数据库在线培训开课啦!更灵活、更专业、更丰富
随机推荐
XTransfer技术新人进阶秘诀:不可错过的宝藏Mentor
介绍BootLoader、PM、kernel和系统开机的总体流程
Based on asp Net development of fixed assets management system source code enterprise fixed assets management system source code
力扣每日一题-第26天-496.下一个更大元素Ⅰ
Memcached comprehensive analysis – 2 Understand memcached memory storage
Datakit 代理实现局域网数据统一汇聚
Implementation of adjacency table storage array of graph
栈的两种实现方式
leetcode-201_2021_10_17
MySQL optimizes query speed
Shengzhe technology AI intelligent drowning prevention service launched
使用Adb连接设备时提示设备无权限
推荐模型之多任务模型:ESMM、MMOE
多线程收尾
Vscode netless environment rapid migration development environment (VIP collection version)
升哲科技 AI 智能防溺水服务上线
面试官:你说你精通Redis,你看过持久化的配置吗?
二叉搜索树模板
ST表+二分
Interpretation of ebpf sockops code