我只是在SO中碰到了这个答案,其中提到Google集合MapMaker很棒。我浏览了文档,但无法真正弄清楚我可以在哪里使用它。有人可以指出某些情况下的情况。适合使用MapMaker。
这是我使用过的一种方法的快速示例MapMaker
:
private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function<Long, Foo>() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
在get(id)
地图上调用时,它会返回该Foo
ID在地图上的ID,或者会从服务器中检索它,对其进行缓存并返回。设置完成后,我无需考虑。另外,由于设置了softValues()
,因此缓存无法填满并引起内存问题,因为系统能够根据内存需求从中清除条目。但是,如果从映射中清除了缓存的值,则下次需要时可以再次向服务器请求它!
事实是,这只是可以使用的一种方式。使映射使用强,弱或软键和/或值的选项,以及在特定时间后删除条目的选项,使您可以执行很多操作。
问题内容: 我尝试使用MapMaker / CacheBuilder进行缓存,但是我不了解如何正确处理空值。 如果方法createExpensiveGraph返回空值,则抛出NullpointerException。我不明白为什么ComputingConcurrentHashMap抛出NPE而不是仅返回空值。 如何正确处理呢?只是捕获NPE并返回null即可?我想念什么吗? 问题答案: Guava
问题内容: 我正在使用Google Collections库AbstractIterator来实现生成器。我在这样做时遇到了一个问题;我将其简化为更基本的类型,并重现了问题。这种减少显然是对它所做的事情的过度杀伤,通过Iterable从1到数位计数。 本质上,在以下代码中,未注释的版本有效,而注释的版本无效(最后提供一个null元素,而不是最后一个数字结尾)。 我是在做错什么,还是这是图书馆的问题
收藏资讯 取消收藏资讯 获取收藏资讯 收藏资讯 POST /news/{news}/collections Response Headers Status: 201 Created 取消收藏资讯 DELETE /news/{news}/collections Response Headers Status: 204 No Content 获取收藏资讯 GET /news/collectio
收藏列表 添加收藏 取消收藏 获取用户收藏的专辑 GET /music/collections Response Status: 200 OK [ { "id": 2, // 专辑id "created_at": "2017-03-15 17:04:31", "updated_at": "2017-06-27 18:40:56", "title": "少女情
收藏 取消收藏 收藏列表 收藏 POST /feeds/:feed/collections Response Status: 201 Created { "message": [ "收藏成功" ] } 取消收藏 DELETE /feeds/:feed/uncollect Response Status: 204 No Centent 收藏列表 GET /feeds/col
在 Favorites(收藏夹)中,您可以储存并管理 Flow 网络服务中您最喜欢的训练目标。在手表上,您可以将您最喜爱的目标用作指定目标。有关更多信息,请参见 Flow 网络服务中的训练规划。 Flow 网络服务中的收藏数量没有限制。如果 Flow 网络服务中收藏夹数量超过 100 个,同步时列表中的前 100 个会传输到手表中。您可以通过拖放操作改变我的最爱的顺序。选择您要移动的“我的最爱”,