Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)
Guava官方文档 https://github.com/google/guava/wiki/CollectionUtilitiesExplained
官方文档这样描述:
[`Maps.uniqueIndex(Iterable, Function)`](http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Maps.html#uniqueIndex-java.lang.Iterable-com.google.common.base.Function-) addresses the common case of having a bunch of objects that each have some unique attribute, and wanting to be able to look up those objects based on that attribute.
大概意思:描述了这样一种常见情况:有一大堆对象,每个对象都有一些独特的属性,能够根据该独特属性查找到对应对象。
Demo1:
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.function.Function;/*** @author: lishuai* @date: 2018/12/4 10:20* @description*/
public class Application {public static void main(String[] args) {// nickname属性能唯一确定一个WebUserArrayList<WebUser> users = Lists.newArrayList(new WebUser(1,"one"),new WebUser(2,"two"),new WebUser(1,"three"),new WebUser(1,"four"));// 得到以nickname为key,WebUser为值的一个mapImmutableMap<String, WebUser> map = Maps.uniqueIndex(users,new com.google.common.base.Function<WebUser, String>() {@Overridepublic String apply(WebUser user) {return user.getNickname();}});System.err.println("map:" + map);System.err.println("name:" + map.get("two").getNickname());}
}class WebUser {private Integer sid;private String nickname;public WebUser(Integer sid, String nickname) {this.sid = sid;this.nickname = nickname;}@Overridepublic String toString() {return "WebUser{" +"sid=" + sid +", nickname='" + nickname + '\'' +'}';}// set、get省略
}
可以进一步简化:
ImmutableMap<String, WebUser> map = Maps.uniqueIndex(users,WebUser::getNickname);
结果:
map:{one=WebUser{sid=1, nickname='one'}, two=WebUser{sid=2, nickname='two'}, three=WebUser{sid=1, nickname='three'}, four=WebUser{sid=1, nickname='four'}}name:two
Demo2:
// nickname属性不能唯一确定一个WebUser(有两个元素的nickname是"one")
ArrayList<WebUser> users = Lists.newArrayList(new WebUser(1,"one"),new WebUser(2,"one"),new WebUser(1,"three"),new WebUser(1,"four"));
结果:
Exception in thread "main" java.lang.IllegalArgumentException: Multiple entries with same key: one=WebUser{sid=2, nickname='one'} and one=WebUser{sid=1, nickname='one'}. To index multiple values under a key, use Multimaps.index.
由此可见,必须确保key的唯一性。
转载于:https://www.cnblogs.com/pianistedward/p/10170828.html
Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)相关推荐
- Guava学习笔记:简化异常处理的Throwables类
Guava学习笔记:简化异常处理的Throwables类 参考文章: (1)Guava学习笔记:简化异常处理的Throwables类 (2)https://www.cnblogs.com/peida/ ...
- Guava学习笔记(转)
Guava(瓜娃)学习笔记 Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitiv ...
- Guava学习笔记:Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- Guava学习笔记:缘起
缘起 为什么要使用Guava呢?因为在几年前就是用过Guava的部分功能,当时有一个项目需要通过缓存来提升部分功能的性能,对本地应用缓存和分布式应用缓存进行了相关的调研,在调研本地应用缓存的时候,第一 ...
- Google Guava学习笔记——基础工具类Joiner的使用
Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...
- Guava学习笔记:EventBus(转)
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现.对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和 ...
- Guava学习笔记:Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处 ...
- Guava学习笔记:Ordering犀利的比较器
2019独角兽企业重金招聘Python工程师标准>>> Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比 ...
- Guava学习笔记(1)--安全地使用null(Using and avoiding null)
Guava是一个基于java1.6的类库集合, 包含了几个google的核心库, collections, caching, primitives support, concurrency libra ...
- Guava学习笔记 6. 字符串处理[Strings]
非常有用的字符串工具,包括分割.连接.填充等操作 本文简单介绍了一下Guava的一些字符串工具 本文参考自: http://ifeve.com/google-guava-strings/ 并添加了一些 ...
最新文章
- python中time库是什么意思_python中time库的time.time()函数的作用是什么
- 把男朋友变成儿子你只需要一秒
- 如何在Pandas中使用Excel文件
- 上海音乐学院计算机考研难吗,上海音乐学院考研难吗?一般要什么水平才可以进入?...
- 网页滚动条上下滚动固定元素左右不固定之sticky
- python高级属性 用法 编程_python高级编程之面向对象高级编程
- XML---(2)LIBXML2库Linux使用指南
- 用 Windows Live Writer [最新版本] 发布 51CTO 博客
- python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
- Linux之远程连接服务器ssh、telnet
- objenesis的基本使用方法
- 安卓8.1放弃Java_升级到Android 8.1后,startForeground失败
- iptv服务器制作 php,DIY点播服务器
- 老路MBA商学课|第001课:机会成本|放弃掉的鱼,是选择熊掌的代价?
- 洛谷P1338(末日的传说)
- 任务分配的穷举法、匈牙利法、分支定界法
- 程序员在上海税前12000的工资,真实发到手能拿到多少?
- MFC在两控件间画线
- 自己写的uvc驱动支持IP2977/ip2970
- 路在脚下【心情转帖】