Guava优美代码-9-MultiMap
多值映射MultiMapMap大概是我们在生产过程中使用最多的容器之一了。Map是一种典型的K-V(键-值)结构。即可以通过一个Key(键)查找到对应的V(值)。正是由于此,JDK规定了Map中不能有重复的键,因为重复会导致无法查询准确的值。但是我们也要注意到这么一个需求:经常地,我们会需要一个键对应多个值,如果用JDK表示,就是这种结构Map<String, List<String&
多值映射MultiMapMap大概是我们在生产过程中使用最多的容器之一了。Map是一种典型的K-V(键-值)结构。即可以通过一个Key(键)查找到对应的V(值)。正是由于此,JDK规定了Map中不能有重复的键,因为重复会导致无法查询准确的值。但是我们也要注意到这么一个需求:经常地,我们会需要一个键对应多个值,如果用JDK表示,就是这种结构Map<String, List<String&
多值集合MultiSet使用过JDK的同学都知道,在Java中集合Set是不允许重复的,也就是说在同一个集合中不允许出现两个相同的元素。但是如果我们需要计算一个集合中一个元素出现的次数,采用JDK的方式去完成的话会非常的麻烦,但是Guava为我们解决了这个问题—-MultiSet。 实现一个Word Count程序我们需要统计一段文字中各个单词出现的次数,下面给出JDK和Guava两种实现方式。
不可变集合Immutable Collections为什么要使用不可变集合不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的; 不可变对象被多个线程调用时,不存在竞态条件问题 不可变集合不需要考虑变化,因此可以节省时间和空间。所有不可变的集合都比它们的可变形式有更好的内存利用率(比如分析和测试细节); 不可变对象因为固定不变,所以可以作为常量来安全使用。 创建对象的不可
简化异常处理的ThrowablesGuava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。这个工具就是Throwables。借助Throwables工具类,我们可以很轻松地完成以下一些事情: 获取异常链 获取最底层的异常 过滤异常,只抛出我们感兴趣的异常 把受检查的异常转换为运行时异常 下面直接给出上述几种用例场景的示例代码分析。 获取异常链(getCausalChain)12
优雅的Guava排序器在开发中经常会对一些数据进行排序或者搜索操作,以前基本上都是先实现Comparator比较器,然后根据这个比较器去比较具体对象之间的顺序。这个过程一直都为开发者所诟病,现在Guava为我们带来了全新的一种比较的方式,那就是Ordering排序器! 排序器[Ordering]是Guava链式风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的
对象操作类ObjectsJava语言中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法。每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这几个方法的工具类, Guava也提供了类似的方式。 关于equals方法需要多说几句,就是我们在写equals判断的时候很容易忘掉很多判断条件,往往容易导致结果不正确,以下的
前置条件Preconditions 前置条件:让方法调用的前置条件判断更简单。 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量
尽量不要使用NULL轻率地使用null可能会导致很多令人吃惊的问题。通过学习Google底层代码库,我们发现95%的集合类不接受null值作为元素。我们认为, 相比默默地接受null,使用快速失败操作拒绝null值对开发者更有帮助。 此外,Null的含糊语义让人很不舒服。Null很少可以明确地表示某种语义,例如,Map.get(key)返回Null时,可能表示map中的值是null,亦或map中没
Google Guava简介Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/
MyBatis代码生成工具MyBatis GeneratorMyBatis Generator简介MyBatis Generator (MBG) 是一个Mybatis的代码生成器 MyBatis 和 iBATIS. 它可以生成Mybatis各个版本的代码,和iBATIS 2.2.0版本以后的代码。 它可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。 这样和数据库表进行交互时