jjzjj

java - 奇怪的 Guava 代码

我在执行以下代码片段时遇到问题:prices=pricesService.getProductsByCategory(category);ListdiscountedPrices=Lists.newArrayList(Iterables.transform(prices,newFunction(){publicDoubleapply(finalDoublefrom){returnfrom*.88;}}));我知道代码的结果是什么,并且它在单元测试中是正确的,但我并不过分熟悉guava或此实现的工作方式/原因。此外,如果列表“价格”中存在空值,目前它似乎也不安全?所以我追求的是:代码工作

java - guava的ImmutableList并不是真的不可变

ImmutableList的documentationsays:Althoughthisclassisnotfinal,itcannotbesubclassedasithasnopublicorprotectedconstructors.我知道这有点牵强,但可以在com.google.common.collect包中创建ImmutableList的子类(因为它的构造函数是不是私有(private)的,而是包私有(private)的)这是可变的。从那时起,任何获得对ImmutableList引用的人都不能确定它确实是不可变的。这不会破坏ImmutableList的目的吗?

java - 为什么java.util.ArrayList中有私有(private)方法outOfBoundsMsg?

这是java.util.ArrayList的片段:/***ConstructsanIndexOutOfBoundsExceptiondetailmessage.*Ofthemanypossiblerefactoringsoftheerrorhandlingcode,*this"outlining"performsbestwithbothserverandclientVMs.*/privateStringoutOfBoundsMsg(intindex){return"Index:"+index+",Size:"+size;}这是来自com.google.collect.Precondit

java - 由于数值精度错误而违反 compareTo 传递契约的影响

我有一些数字要比较。它们代表通过不同空间的路径长度。对我来说不幸的是,一些不精确导致了错误的比较。例如,在注意到错误的效果后,我发现我在进行这样的比较:a=384.527100541296b=384.52710054129614//Notethetrailing14为了我的目的,a和b应该是相等的。我注意到guava有一个用于double的fuzzyCompare()方法,它似乎做了我想做的,忽略了一些这种精度:privatestaticfinaldoubleCOMPARISON_PRECISION=1e-10;privatestaticfinalComparatorfuzzyComp

java - guava-libraries : Is Objects. hashCode(Object[]) 碰撞安全吗?

在查看覆盖hashCode()的不同选项时,我被定向到GoogleGuava库中的Objects.hashCode(Object[])(javadoc).javadoc声明它委托(delegate)给Arrays.hashCode(Object[])。在许多不同的对象类型中使用此方法是否安全?这是否容易发生哈希冲突,或者这不太可能仅仅是因为容器通常只包含一种类型的对象?作为一个简单的例子,考虑以下类,publicclassStudent{privatefinalStringname;publicStudent(Stringname){this.name=name;}@Overridep

java - Guava LoadingCache - 如何处理后备存储中不存在的键

我正在使用CacheBuilder和LoadingCache实现数据库数据的内存缓存。假设客户端在缓存中查询后备存储中不存在的项目。我想让客户端知道没有找到指定键的数据。处理此问题的最佳方法是什么?在缓存中存储特殊值,表示“无数据”。不在缓存中存储任何内容并引发异常。其他想法? 最佳答案 我总是通过以下方式解决这个问题。interfaceKeyValueService{Vget(Kkey);}classCachingKeyValueService{Cache>cache;Vget(Kkey){returncache.get(key)

java - 在java中设置间隔

我有一个包含整数值的间隔列表[例如。[1,4],[10,19]等]。有没有办法将这些间隔放入某些java集合的容器中[例如。Set]这样我就可以在容器上调用“联合”函数。'union'函数应该给我一个间隔列表,这样如果任何2个插入的间隔重叠,那么它们应该合并到输出中。我尝试在Guava中使用Range类,但最终在合并之前将所有间隔相互比较。一个优雅的方法将非常感激!这是我根据下面的回复尝试过的。输出是[[1,15],[17,20]],这是正确的。我想知道是否有一些现有的API可以实现类似的功能。publicstaticvoidmain(String[]args){//mockdataL

java - 我可以使用 Guava 的 ComparisonChain 以特殊方式处理 null 字段吗?

我有一个包含多个字段的ComplexObject,我想这样说:如果两者都存在字段x,则继续比较链中的下一个compare。如果两者都为空,则继续进行比较链中的下一个compare。如果一个为空而另一个不为空,则将空值放在最后我不知道该怎么做,因为据我所知.compare(c1.getX(),c2.getX(),Ordering.arbitrary().nullsLast())将如果对象都存在且相等,则认为它们相等如果两个对象都为空,则认为它们是相等的。有没有一种方法可以使用Guava的ComparisonChain或Ordering类来实现我想要的?或者有没有更好的方法来考虑解决这个问

java - 什么是更惯用的 : setters taking an Optional<T> or just T?

使用Optional时对于可为null的字段,让settertake是否更惯用一个Optional或只是一个T然后有它如下?publicclassBar{privateOptionalfoo;publicvoidsetFoo(Tfoo){this.foo=Optional.fromNullable(foo);}publicOptionalgetFoo(){returnfoo;}} 最佳答案 我会考虑两者都不做,将值作为T在内部存储,并且只在API级别有Optional。publicclassBar{privateTfoo;publi

java - 为什么 WeakHashMap 在 GC 后对值有强引用?

WeakHashMap中的关键对象变得弱可达。并且map应该在GC之后删除条目。但是对值对象的强引用仍然存在。为什么?使用Guava弱键映射观察到相同的行为。预期输出:...refKey.get=nullrefValue.get=null但是我得到了输出:map.keys=[]map.values=[]map.size=0refKey.get=nullrefValue.get=(123)代码:importjava.lang.ref.WeakReference;importjava.util.Map;importjava.util.WeakHashMap;importcom.google