【Guava】BiMap&Multimap&Multiset】的更多相关文章

Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的难度wi.由于不可以让选手 一上场就被绝顶难题撂倒,所以难度必须循序渐进,从简到繁. G.Sha制定了一套具体的抽题规则.首先,每位选手的第1道题一定是当前题库中最简单的.每位选手的下一道题,一定是题库中(1 )比刚刚答过的题严格地更难,(2)难度尽可能低的题.当然,每道题使用一遍就从题库中删掉.(…
一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水.当请求过多时,水直接溢出.可以看出,漏桶算法可以强制限制数据的传输速度. 2.令牌桶算法 令牌桶算法的原理是系统以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务.这种算法可以应对突发程度的请求,因此比漏桶算法好. 在 Wikipedia 上,令牌桶算法是这么描述的: 每秒会有 r…
Convert Collections to String Using Joiner Convert List into String Using Joiner @Test public void whenConvertListToString_thenConverted() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"…
前置条件:让方法调用的前置条件判断更简单. 在我们的日常开发中,经常要对入参进行一定的参数校验,比如是否为空,参数的取值范围是否符合要求等等.这种参数校验如果我们单独进行校验的话,代码的重复率比较高,也不是很优雅.Guava提供了一个类PreConditions来统一校验我们的参数,同时可以抛出对应的异常信息,将参数校验的工作进行了统一. 下面是它提供的几种校验方法: 方法声明(不包含额外参数) 描述 检查失败时抛出的异常 checkArgument(boolean) 检查boolean是否为t…
null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投入使用的时候,空指针异常出现了,这是一种讨厌的情况. 鉴于此google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方法of时,如果传入的参数为null就抛出NullPointerException异常. 使用Op…
一.使用场景 在日常开发中,我们经常会遇到需要调用外部服务和接口的场景.外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取.重试策略在服务治理方面也有很广泛的使用,通过定时检测,来查看服务是否存活( Active). Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易. 用作者的话来说: This is a small extensi…
一,equals方法 我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.google.common.base.Objects类提供了一个静态方法equals可以避免我们自己做是否为空的判断,示例如下: Object a = null; Object b = new Object(); boolean aEqualsB = Objects.equal(a, b); 源码如下: p…
guava为编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用选择来提升代码逻辑性. 预判断并不是新东西,Apache Commons项目有类似的功能,但是并没有瓜娃提供的解决方案简洁,预判断用来验证方法的参数,状态等等,当条件判断结果是false,预判断就会抛出预想的异常,预想的意味着以下情形,当检查状态的时候,你可以使用Preconditions.checkState( 条件 ),如果条件判断的结果是false,将会抛出非法状态异常…
一,Strings类 public void testStrings(){ Strings.isNullOrEmpty("");//返回true Strings.nullToEmpty(null);//"" Strings.nullToEmpty("chen");//返回"chen" Strings.emptyToNull("");//返回null Strings.emptyToNull("che…
Guava官方文档-RateLimiter类 原文链接 作者:Dimitris Andreou  译者:魏嘉鹏 校对:方腾飞 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证.一旦获取到许可证,不需要再释放许可证. 校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过…