当前位置:网站首页>These map operations in guava have reduced my code by 50%
These map operations in guava have reduced my code by 50%
2022-06-24 21:56:00 【InfoQ】
Map<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
Table - Double bond Map
MapkeyvalueTablevaluekeyTablekeyrowKeycolumnKeyMapMap<String,Map<String,Integer>> map=new HashMap<>();
// Store elements
Map<String,Integer> workMap=new HashMap<>();
workMap.put("Jan",20);
workMap.put("Feb",28);
map.put("Hydra",workMap);
// Take out the elements
Integer dayCount = map.get("Hydra").get("Jan");
TableTable<String,String,Integer> table= HashBasedTable.create();
// Store elements
table.put("Hydra", "Jan", 20);
table.put("Hydra", "Feb", 28);
table.put("Trunks", "Jan", 28);
table.put("Trunks", "Feb", 16);
// Take out the elements
Integer dayCount = table.get("Hydra", "Feb");
Map1、 get key or value Set
//rowKey or columnKey Set
Set<String> rowKeys = table.rowKeySet();
Set<String> columnKeys = table.columnKeySet();
//value aggregate
Collection<Integer> values = table.values();
keyvalue[Hydra, Trunks]
[Jan, Feb]
[20, 28, 28, 16]
2、 Calculation key All corresponding value And
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、 transformation rowKey and 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、 Turn to nested 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 - two-way 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");
// Use key obtain value
System.out.println(biMap.get("Tony"));
BiMap<String, String> inverse = biMap.inverse();
// Use value obtain key
System.out.println(inverse.get("Titan"));
IronMan
Thanos
1、 Effect of operation after reversal
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 Do not repeat
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 - Multivalued 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、 Get a collection of values
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、 operation get After the collection
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);// This 0 It's a subscript
month.add(12);
System.out.println(multimap);
{month=[3, 12], day=[2, 8]}
3、 Convert to 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、 The question of quantity
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 - Range 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 - example 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
ClassToInstanceMapsummary
Map边栏推荐
- leetcode1720_2021-10-14
- 排查到解决问题的过程:浏览器突然无法访问网页,错误代码:0x80004005,最终定位:“电脑打开热点,电脑就不能上网了”
- 基于ASP.NET开发的固定资产管理系统源码 企业固定资产管理系统源码
- Data link layer & some other protocols or technologies
- 网络层 && IP
- 01---两列波在相遇处发生干涉的条件
- 如何化解35岁危机?华为云数据库首席架构师20年技术经验分享
- 【吴恩达笔记】机器学习基础
- Introduce the overall process of bootloader, PM, kernel and system startup
- 基于kruskal的最小生成树
猜你喜欢
![[精选] 多账号统一登录,你如何设计?](/img/df/9b4fc11a6971ebe8162ae84250a782.png)
[精选] 多账号统一登录,你如何设计?
![[camera Foundation (I)] working principle and overall structure of camera](/img/5d/c29d636a90d01e5c3852df2a0dd833.png)
[camera Foundation (I)] working principle and overall structure of camera

滤波数据分析

Réduire le PIP à la version spécifiée (mettre à jour le PIP avec pycharm avant de le réduire à la version originale)

多线程收尾

Multi task model of recommended model: esmm, MMOE

leetcode-201_2021_10_17

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

煮茶论英雄!福建省发改委、市营商办领导一行莅临育润大健康事业部交流指导

机器学习:线性回归
随机推荐
C language - keyword 1
TypeScript快速入门
基于ASP.NET开发的固定资产管理系统源码 企业固定资产管理系统源码
ST表+二分
Multi task model of recommended model: esmm, MMOE
火狐拖放后,总会默认打开百度搜索,如果是图片,则会打开图片。
Visit Amazon memorydb and build your own redis memory database
PKI notes
dp问题集
Network layer & IP
想当测试Leader,这6项技能你会吗?
LeetCode-513. Find the value in the lower left corner of the tree
多线程收尾
leetcode1863_ 2021-10-14
【吴恩达笔记】卷积神经网络
Kubernetes 集群中流量暴露的几种方案
手动事务的几个类
[camera Foundation (II)] camera driving principle and Development & v4l2 subsystem driving architecture
leetcode-201_ 2021_ 10_ seventeen
队列实现原理和应用