Guava - Map
创建Map
通常在创建map时使用new HashMap<>();的方法,guava提供了一个简洁的方法
Maps.newHashMap();
List转换Map
List<Solution> list= new ArrayList<>();
//普通写法
Map<Integer,Solution> map= Maps.newHashMap();
for(Solution a:list){
map.put(a.id,a);
}
//Maps.uniqueIndex(list, function);
//guava的写法,注意: 此时list中的元素的属性不能有重复的,如果有的话会报错
Map<Integer,Solution> map2 =Maps.uniqueIndex(list, new Function<Solution, Integer>() {
@Override
public Integer apply(Solution solution) {
return solution.id;
}
});
一个key对应多个value的Multimap
在编写代码的过程中经常会用到
Map<Integer,List<String>> maps= new HashMap<>();
if(maps.get(1)==null){
List<String> list= new ArrayList<>();
list.add("1");
maps.put(1,list);
}else{
maps.get(1).add("I");
}
Guava的写法
// ArrayListMultimap<Object, Object> objectObjectArrayListMultimap = ArrayListMultimap.create();
HashMultimap<Integer, String> objectObjectHashMultimap = HashMultimap.create();
//只需要put即可,不用判断是否为null情况
objectObjectHashMultimap.put(1,"1");
objectObjectHashMultimap.put(1,"2");
objectObjectHashMultimap.put(1,"3");
System.out.println(objectObjectHashMultimap.get(1));
ArrayListMultimap 返回的是一个List,HashMultimap返回的是一个Set
Multimap的实现
| Implementation | Keys 的行为类似 | Values的行为类似 |
|---|---|---|
| ArrayListMultimap | HashMap | ArrayList |
| HashMultimap | HashMap | HashSet |
| LinkedListMultiap | LinkedHashMap | LinkedList |
| LinkedHashMultimap | LinkedHashMap | LinkedHashSet |
| TreeMultimap | TreeMap | TreeSet |
| ImmutableListMultimap | ImmutableMap | ImmutableList |
| ImmutableSetMultimap | ImmutableMap | ImmutableSet |
通过key找value 也可通过value找key的Map-BiMap
BiMap也可以反向把值映射到键,只要确保值唯一。
BiMap<String,Integer> biMap= HashBiMap.create();
biMap.put("I",1);
biMap.put("V",5);
biMap.put("X",10);
biMap.put("L",50);
biMap.put("C",100);
biMap.put("D",500);
biMap.put("M",1000);
/*HashBiMap.create(new HashMap<String,Integer>(){{
put("I",1);
put("V",5);
put("X",10);
put("L",50);
put("C",100);
put("D",500);
put("M",1000);
}});*/
BiMap<Integer, String> inverse = biMap.inverse();//翻转
System.out.println(inverse);//{1=I, 5=V, 10=X, 50=L, 100=C, 500=D, 1000=M}
Guava - Map的更多相关文章
- Guava常用方法
简介 Guava,中文是石榴的意思,Guava项目,是基于java的Google的开源的工具类库,包含了许多被Google的java项目广泛依赖的核心库, 例如:集合.缓存.原生类型支持.并发库.通用 ...
- JAVA构造MAP并初始化MAP
第一种方法:static块初始化 public class Demo{ private static final Map<String, String> myMap; static { m ...
- Map初始化
转载至:http://blog.csdn.net/dujianxiong/article/details/54849079 第一种方法:static块初始化 public class Demo{ pr ...
- List转换Map的三种方式
1.for循环 ... 2.使用guava Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, ...
- 使用guava过期map
最近需要将微信的accesstoken保存到缓存里面,防止重复请求微信接口获取token,造成token请求次数超标,其实随便一个缓存都可以轻松解决,但是现有的环境中没有redis,没有memcahe ...
- guava处理字符串与List之间,字符串与map之间的转换<转>
import static org.junit.Assert.*; import java.util.List; import java.util.Map; import org.junit.Test ...
- Guava中这些Map的骚操作,让我的代码量减少了50%
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...
- String 转Map(基于Guava类库)
字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...
- Guava实现 过滤文本,排序,转换内容,分组计数转换map 等等
重要点 :看注释 从access.log中统计数据 对healthcheck.html的请求不计入统计 输出请求总量,以及GET和POST分别的总量 输出请求最频繁的10个接口及其次数,按次数降序 输 ...
随机推荐
- fiddler操作详情
1.设置fiddler请求过滤 2.请求与响应的格式内容 3.拦截请求操作 a.按F11开始拦截,发送请求 b.修改请求数据 c.SHIFT+F11关闭拦截 d.run to complete,把修 ...
- Task01:初识数据库
本章主要讲解数据库安装和数据库基本介绍,考虑易用性及普及度,本课程采取mysql进行教学. 1.1 初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合.该数据集合称 ...
- 【NX二次开发】Block UI 分割线
设置控件可见 this->separator0->GetProperties()->SetLogical("Show",true);
- 【模拟8.10】Weed(线段树)
考试只好随便骗骗分过去啦啦啦..... 正解是玄学线段树: 以每个操作为叶子节点,我们定义几个变量ce表示层数,h表示高度,add表示所减的层数 那么问题转化为单点修改的问题输出直接是根节点答案 但是 ...
- NOIP模拟测试11「string·matrix·big」
打的big出了点小问题,maxx初值我设的0然后少了10分 第二题暴力打炸 第一题剪了一些没用的枝依然40分 总分70 这是一次失败的考试 string 想到和序列那个题很像,但我没做序列,考场回忆学 ...
- 创建react项目并集成eslint/prettier/commit-lint
创建 react 项目 npx create-react-app jira-new --template typescript 如果不想使用 TS,而要用 JS 的话,则删除 -template ty ...
- 磁盘文件监控(Java)并发送邮件通知、系统定期执行的办法
以下是通过xml文件进行的监控路径.文件以及邮件信息的配置,读取xml文件使用的是三方jar包:dom4j 收发邮件采用的是最普通的javamail,需要两个jar包,mail.jar和activit ...
- 远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
远程连接MySQL错误"plugin caching_sha2_password could not be loaded"的解决办法 问题描述: 今天在阿里云租了一个服务器,当我用 ...
- C++中指针与引用详解
在计算机存储数据时必须要知道三个基本要素:信息存储在何处?存储的值为多少?存储的值是什么类型?因此指针是表示信息在内存中存储地址的一类特殊变量,指针和其所指向的变量就像是一个硬币的两面.指针一直都是学 ...
- Java并发编程中的锁
synchronized 使用synchronized实现同步有2种方式: 同步方法(静态与非静态) 同步代码块 任何Java对象均可作为锁使用,其中,使用的锁对象有以下3种: 静态同步方法中,锁是当 ...