Tag: 番石榴

从Map中获取Java / Guava中的一些键的所有值?

是否有一种聪明的方法可以从一个地图中获取所有值? 我想要一个像这样的方法: public static Collection getAll(Map map, Collection keys) 或者已经是番石榴的方式?

什么是集合的视图?

在使用Guava集合并阅读其文档时,我一直在阅读术语视图几次。 我已经在这个背景下寻找一个视图的解释,以及它是否是在番石榴之外使用的术语。 它经常在这里使用。 Guava的这种类型有其名称的视图 。 我的猜测是,集合的视图是另一个具有相同数据但结构不同的集合; 例如,当我将java.util.HashSet的条目添加到java.util.LinkedHashSet ,后者将是前者的视图。 那是对的吗? 有人可以给我一个链接到一个公认的视图定义,如果有的话? 谢谢。

简明地将Optional.absent()值传递给方法

使用Guava的Optional类型作为方法参数的一个问题是你不能简单地写 // method declaration public void foo(Optional arg); // compiler error foo(Optional.absent()); 由于类型推断失败,但必须明确添加类型: // real method call foo(Optional. absent()); 我怎么能避免呢?

用番石榴缓存

什么Guava类适合线程安全的缓存? 我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧? 我看到ConcurentLinkedHashMap的某个地方,是不是要走的路? 它已经在最近发布了吗? 对不起请问混乱的方式…… 更新 这个问题很老了,通过他的回答可能是浪费时间。 很久以来,就有了一个CacheBuilder 。

使用Guava RateLimiter类调用限制方法

我试图限制每秒调用一个方法的次数。 我尝试使用Guava RateLimiter实现这一目标。 RateLimiter rateLimiter = RateLimiter.create(1.0);//Max 1 call per sec rateLimiter.acquire(); performOperation();//The method whose calls are to be throttled. 然而,呼叫的方法不限于每秒1个,而是连续的。 使用Thread.sleep()可以实现限制,但我希望使用Guava而不是sleep()。 我想知道使用Guava RateLimiter实现方法调用trottling的正确方法。 我已经检查了RateLimiter的文档,并试图使用相同的但无法达到预期的结果。

有没有番石榴概述?

番石榴库是强大的,但我不确定这个库的所有可能性是什么。 我找到了有趣的教程,如http://scaramoche.blogspot.com/search/label/guava 但有没有关于图书馆可以做的一切的概述?

具有弱/软使用的Guava CacheBuilder或MapMaker

我不习惯在Java中处理Soft和Weak引用,但我理解这个原理,因为我习惯于处理像Gemfire这样的数据网格,它在内存已满时为hddfunction提供溢出,可能使用软引用或类似的东西我猜测。 在番石榴中我不明白的是它提供了使键变软/弱的方法,以及值软/弱的方法。 我只是想知道用非软值创建软键的重点是什么? 我的意思是,当开始收集软引用时,我们无法通过其键找到条目,那么为什么我们希望这些值保留在地图中? 有人可以给我们一些用例: 弱键/软值 弱键/正​​常值 软键/弱值 软键/正常值 谢谢 编辑我不确定我的问题是否足够精确,所以我想知道的是: 收集密钥(弱/软)时,该值会发生什么变化(非弱/软) 当收集一个值(弱/软)时,密钥会发生什么 具有缺失部分(键或值)的条目是否保留在缓存中? 当您希望此类条目保留在缓存中时,是否有任何用例。 编辑:正如Kevin Bourillon的回答所讨论的,最后我想我明白为什么使用软键并不意味着什么。 原因如下: static class KeyHolder { final private String key; public KeyHolder(String key) { this.key = key; } public String getKey() { return key; } @Override public boolean equals(Object o) { KeyHolder that = (KeyHolder)o; boolean equality = this.getKey().equals(that.getKey()); […]

使用Guava Ordering对对象列表进行多标准排序

我有一个类无法实现可比性,但需要根据2个字段进行排序。 我怎样才能用番石榴来实现这个目标? 让我们说课程是 class X { String stringValue; java.util.Date dateValue; } 我有一份清单 List lotsOfX; 我想先根据值字段对它们进行排序,然后根据每个’组’的’value’字段中的dateValue进行排序。 到目前为止我一直在做的是 List sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(dateValueSortFunction).reverse().sortedCopy(lotsOfX)); sortedList = ImmutableList.copyOf(Ordering.natural().onResultOf(stringValueSortFunction).sortedCopy(sortedList)); function定义为: public class DateValueSortFunction implements Function { @Override public Long apply(X input) { return input.getDateValue().getTime(); //returns millis time } } 和 public class StringValueSortFunction implements Function { @Override public Integer apply(X input) […]

有效地“修改”ImmutableMap

我们目前正在使用Guava作为其不可变的集合,但我惊讶地发现他们的地图没有方法可以轻松创建新的地图,只需稍作修改。 最重要的是,他们的构建器不允许为键分配新值或删除键。 因此,如果我只想修改一个值,这就是我希望能够做到的: ImmutableMap<Guid, ImmutableMap> originalMap = /* get the map */; ImmutableMap<Guid, ImmutableMap> modifiedMap = originalMap.cloneAndPut(key, value); 这就是Guava期待我做的事情: ImmutableMap<Guid, ImmutableMap> originalMap = /* get the map */; Map<Guid, ImmutableMap> mutableCopy = new LinkedHashMap(originalMap); mutableCopy.put(key, value); originalMap = ImmutableMap.copyOf(mutableCopy); /* put the map back */ 通过这样做,我得到了我想要的修改的地图的新副本。 原始副本不受影响,我将使用primefaces引用将事物放回去,因此整个设置是线程安全的。 它只是很慢。 这里有很多浪费的复制品。 假设地图中有1,024个桶。 当你可以按原样使用那些不可变的桶并且只克隆其中一个时,那就是你不必要地再次创建的1,023个桶(也是每个两次)。 所以我想: 是否有一种Guava实用方法埋藏在某处? (它不在地图或ImmutableMap.Builder中。) 有没有其他Java库可以做到这一点? […]

有没有简洁的方法为Google Guava中的InputStream创建InputSupplier?

Google Guava中有一些工厂方法可以创建InputSuppliers,例如从byte[] : ByteStreams.newInputStreamSupplier(bytes); 或者来自File : Files.newInputStreamSupplier(file); 是否有类似的方法为给定的InputStream创建InputSupplier ? 也就是说,这种方式比匿名类更简洁: new InputSupplier() { public InputStream getInput() throws IOException { return inputStream; } }; 背景:我想将InputStreams与例如Files.copy(…)或ByteStreams.equal(…) 。