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)相关推荐

  1. Guava学习笔记:简化异常处理的Throwables类

    Guava学习笔记:简化异常处理的Throwables类 参考文章: (1)Guava学习笔记:简化异常处理的Throwables类 (2)https://www.cnblogs.com/peida/ ...

  2. Guava学习笔记(转)

    Guava(瓜娃)学习笔记 Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitiv ...

  3. Guava学习笔记:Google Guava 类库简介

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  4. Guava学习笔记:缘起

    缘起 为什么要使用Guava呢?因为在几年前就是用过Guava的部分功能,当时有一个项目需要通过缓存来提升部分功能的性能,对本地应用缓存和分布式应用缓存进行了相关的调研,在调研本地应用缓存的时候,第一 ...

  5. Google Guava学习笔记——基础工具类Joiner的使用

    Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...

  6. Guava学习笔记:EventBus(转)

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现.对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和 ...

  7. Guava学习笔记:Preconditions优雅的检验参数

    在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处 ...

  8. Guava学习笔记:Ordering犀利的比较器

    2019独角兽企业重金招聘Python工程师标准>>> Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比 ...

  9. Guava学习笔记(1)--安全地使用null(Using and avoiding null)

    Guava是一个基于java1.6的类库集合, 包含了几个google的核心库, collections, caching, primitives support, concurrency libra ...

  10. Guava学习笔记 6. 字符串处理[Strings]

    非常有用的字符串工具,包括分割.连接.填充等操作 本文简单介绍了一下Guava的一些字符串工具 本文参考自: http://ifeve.com/google-guava-strings/ 并添加了一些 ...

最新文章

  1. python中time库是什么意思_python中time库的time.time()函数的作用是什么
  2. 把男朋友变成儿子你只需要一秒
  3. 如何在Pandas中使用Excel文件
  4. 上海音乐学院计算机考研难吗,上海音乐学院考研难吗?一般要什么水平才可以进入?...
  5. 网页滚动条上下滚动固定元素左右不固定之sticky
  6. python高级属性 用法 编程_python高级编程之面向对象高级编程
  7. XML---(2)LIBXML2库Linux使用指南
  8. 用 Windows Live Writer [最新版本] 发布 51CTO 博客
  9. python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
  10. Linux之远程连接服务器ssh、telnet
  11. objenesis的基本使用方法
  12. 安卓8.1放弃Java_升级到Android 8.1后,startForeground失败
  13. iptv服务器制作 php,DIY点播服务器
  14. 老路MBA商学课|第001课:机会成本|放弃掉的鱼,是选择熊掌的代价?
  15. 洛谷P1338(末日的传说)
  16. 任务分配的穷举法、匈牙利法、分支定界法
  17. 程序员在上海税前12000的工资,真实发到手能拿到多少?
  18. MFC在两控件间画线
  19. 自己写的uvc驱动支持IP2977/ip2970
  20. 路在脚下【心情转帖】

热门文章

  1. 算法:Regular Expression Matching(正则表达式匹配)
  2. 2021-09-15频繁项集的评估标准
  3. 184.部门工资最高的员工
  4. No module named ‘wrapt‘
  5. 现代通信原理A.1-a:仿真确定信号波形与频谱(Matlab版)
  6. leetcode121、122、123
  7. java Relative Path and absolute
  8. hdu acm1157
  9. 使用TScopy访问已锁定的文件
  10. 使用wireshark对HTTPS解密