我刚开始学习Guava,我注意到ImmutableList.builder()有一些特别之处.这不编译:ListiList=ImmutableList.builder().add("One").add("Two").build();//Typemismatch:cannotconvertfromListtoList这个有效:ListiList=newImmutableList.Builder().add("One").add("Two").build();我可以忍受使用newImmutableList.Builder()但这是ImmutableList.builder()的错误吗??
我使用guava的EventBus,不幸的是它捕获并记录了事件处理程序抛出RuntimeException时发生的InvocationTargetException。我可以禁用此行为吗? 最佳答案 就目前而言,这是一个深思熟虑的决定,并在EventBus文档中进行了讨论:Handlersshouldnot,ingeneral,throw.Iftheydo,theEventBuswillcatchandlogtheexception.Thisisrarelytherightsolutionforerrorhandlingandshou
基本上我需要一个数据结构来存储服务器端的临时聊天消息。应该是:有界:因为我不需要存储太多消息,客户端会每秒发送一次获取新消息的请求。我认为绑定(bind)大小应该是最大值。一秒钟内并发请求的数量。当缓冲区已满时,旧消息将被删除。适合高并发访问:我不想使用Collections.synchronizedXXXX这样的数据结构,因为在迭代过程中,如果其他线程改变了数据结构,例如添加一条消息,它会抛出一个异常,所以我必须锁定整个数据结构,实际上我并不关心客户端请求是否可以获得最后插入的消息,因为他们会在一秒钟后发送一个新请求,另一方面,写操作应该永远不会延迟。包java.util.concu
Java有一个Comparator用于提供类本身外部对象的比较,以允许使用多种/替代方法进行有序比较。但是进行无序比较的唯一标准方法是覆盖equals()在一个类中。当我想在一个类的外部提供多个/替代的无序比较时,我应该怎么做?(明显的用例是根据特定属性将集合划分为等价类。)假设最终用途是用于无序检查(例如,不是用于排序或索引),实现Comparator是否可行?只检查是否相等,如果两个对象相等则返回0,当两个对象不相等时返回一个值!=0?(注意:我不采用此解决方案的唯一原因是,从技术上讲,它可以通过不提供满足传递性和对称性的关系来破坏Comparator的契约。)似乎应该有一个Equ
Javadoc对于com.google.common.collect.ImmutableSet建议有两种方法可以创建ImmutableSet的实例来自E类型的元素(例如Ee1和Ee2)尚未在集合中(即忽略从现有集合创建的copyOf方法):“的”方法:ImmutableSetset=ImmutableSet.of(e1,e2);build者:ImmutableSetset=newImmutableSet.Builder().add(e1).add(e2).build();这两种方法都使用ImmutableSet.Builder#construct但我应该更喜欢哪一个?
我一直在寻找通用惰性不可修改列表实现的体面实现来包装我的搜索结果条目。任务的不可修改部分很容易,因为它可以通过Collections.unmodifiableList()实现,所以我只需要整理出惰性部分。令人惊讶的是,google-collections没有什么可提供的;同时LazyListfromApacheCommonsCollections不支持泛型。我找到了anattempt在google-collections之上构建一些东西,但它似乎不完整(例如不支持size())、过时(不使用1.0final编译)并且需要一些外部类,但可能是用作构建我自己的类(class)的良好起点。有
我刚看到这个answerinSO其中提到GoogleCollectionMapMaker太棒了。我仔细阅读了文档,但无法真正弄清楚我可以在哪里使用它。任何人都可以指出一些适合使用MapMaker的场景。 最佳答案 这是我使用MapMaker的一种方式的快速示例:privatefinalConcurrentMapfooCache=newMapMaker().softValues().makeComputingMap(newFunction(){publicFooapply(Longid){returngetFooFromServer(
我不习惯处理Java中的软引用和弱引用,但我理解其中的原理,因为我习惯处理像Gemfire这样的数据网格,它在内存已满时提供溢出到硬盘功能,可能使用软引用或我猜是类似的东西。我在Guava中不明白的是它提供了使键变软/变弱以及使值变软/变弱的方法。例如,我只是想知道使用非软值创建软键有什么意义?我的意思是,当开始收集软引用时,我们无法再通过其键找到条目,那么为什么我们希望值保留在映射中?谁能给我们一些用例:弱键/软值弱键/正常值软键/弱值软键/正常值谢谢编辑我不确定我的问题是否足够精确,所以我想知道的是:收集键(弱/软)时,值会发生什么变化(非弱/软)当收集到一个值(弱/软)时,键会发
我有一个Multimapmultimap=ArrayListMultimap.create();来自Guava。我想知道如何对多图中的Date键进行排序。目前,我正在这样做:IteratordateItr=multimap.keySet().iterator();SettreeSet=newTreeSet(Collections.reverseOrder());然后我循环遍历treeSet迭代器。知道如何避免这种规避吗? 最佳答案 这里是Guava团队成员。使用TreeMultimap,或者如果你需要映射到List,使用Multim
简单地说,我必须重写缓存选择正确键的方式,因为在检索键时不应考虑某些字段(例如,时间戳、消息ID等)。我无法修改key对象的实际哈希函数,因为它已经在我的代码中用于识别。Guava缓存有可能吗?并有解决方法?这是我的配置:CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).recordStats().expireAfterWrite(DEFAULT_AGE,TimeUnit.DAYS).build(newCacheLoader(){@OverridepublicResponseload(Requestrequest){returnrequ