创建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的更多相关文章

  1. Guava常用方法

    简介 Guava,中文是石榴的意思,Guava项目,是基于java的Google的开源的工具类库,包含了许多被Google的java项目广泛依赖的核心库, 例如:集合.缓存.原生类型支持.并发库.通用 ...

  2. JAVA构造MAP并初始化MAP

    第一种方法:static块初始化 public class Demo{ private static final Map<String, String> myMap; static { m ...

  3. Map初始化

    转载至:http://blog.csdn.net/dujianxiong/article/details/54849079 第一种方法:static块初始化 public class Demo{ pr ...

  4. List转换Map的三种方式

    1.for循环 ... 2.使用guava Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, ...

  5. 使用guava过期map

    最近需要将微信的accesstoken保存到缓存里面,防止重复请求微信接口获取token,造成token请求次数超标,其实随便一个缓存都可以轻松解决,但是现有的环境中没有redis,没有memcahe ...

  6. guava处理字符串与List之间,字符串与map之间的转换<转>

    import static org.junit.Assert.*; import java.util.List; import java.util.Map; import org.junit.Test ...

  7. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

  8. String 转Map(基于Guava类库)

    字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...

  9. Guava实现 过滤文本,排序,转换内容,分组计数转换map 等等

    重要点 :看注释 从access.log中统计数据 对healthcheck.html的请求不计入统计 输出请求总量,以及GET和POST分别的总量 输出请求最频繁的10个接口及其次数,按次数降序 输 ...

随机推荐

  1. python小知识,字典

    知识融合在代码中 """ create:2020年12月20日 功能:字典的部分使用方法 """ #空字典 dic={} print(&qu ...

  2. JUC 并发编程--06, 阻塞队列(7种), 阻塞等待 api的 代码验证

    这些队列的 api ,就是添加队列,出队列,检测对首元素, 由于 add()--remove(), offer()--poll(),太简单这里不做验证, 只验证后二组api: 阻塞等待( put()- ...

  3. CentOS 30分钟部署 .net core 在线客服系统

    前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程.期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 8.3 来安装部署.在本文中我 ...

  4. UF_CSYS 坐标系操作

    Open C   UF_CSYS_ask_csys_info               获取WCS坐标系的原点坐标和矩阵标识UF_CSYS_ask_matrix_of_object    获得对象 ...

  5. 【NX二次开发】创建有界平面UF_MODL_create_bplane

    先准备几条曲线如下图所示,我们用这几条线来创建一个有界平面: 效果:  源码: //有界平面 extern DllExport void ufusr(char *param, int *returnC ...

  6. 【SQLite】教程07-C/C++上使用SQLite3

    1.配置好C/C++项目环境 2.源码 1 #include <iostream> 2 #include <vector> 3 #include <string> ...

  7. CDQ分治(三维偏序集)

    排序,三关键字 去重 归并排序+树状数组 #include<bits/stdc++.h> using namespace std; #define re register int cons ...

  8. 百炼 POJ2393:Yogurt factory【把存储费用用递推的方式表达】

    2393:Yogurt factory 总时间限制:  1000ms 内存限制:  65536kB 描述 The cows have purchased a yogurt factory that m ...

  9. JUnit5编写基本测试

    JUnit5的测试不是通过名称,而是通过注解来标识的. 测试类与方法 Test Class:测试类,必须包含至少一个test方法,包括: 最外层的class static member class @ ...

  10. redis-list实现

    Redis 数据结构---链表 Redis的list底层实现使用的不是数组而是链表的数据结构 叫listnode  是一个双向链表 ListNode{ Struct listNode *prev  / ...