问题标签 [guava]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - BufferedIterator 实现
有人知道开源的 BufferedIterator,在后台线程上急切地获取下一个 N 元素吗?这是来自TechRepublic 文章的实现,但我认为它尚未经过彻底测试。
Iterators .buffer(Iterator toBuffer, int bufferSize) 将是 Guava 的一个很好的补充,是否考虑过?
java - 大多数 Iterators 和 Iterables 方法都是 LAZY 的!这是什么意思
演示文稿的 1 说“这些方法很懒惰!”
有人能帮我理解他们的意思吗,假设我有一个集合,Persons
我应用过滤器只返回姓氏为 DOE 的人。
那么这是否意味着“过滤仅在第一次调用 doeOnly.next() 时发生?”
java - 如何使用可用 RAM 在 Java 中有效地缓存对象?
我需要使用可用 RAM 的一部分在 Java 中缓存对象。我知道其他人已经问过这个问题,但没有一个回答符合我的要求。
我的要求是:
- 简单轻便
- 并不比普通的 HashMap 慢很多
- 使用 LRU,或一些近似于 LRU 的删除策略
我尝试了 LinkedHashMap,但是它要求您指定最大元素数,而且我不知道填充可用 RAM 需要多少元素(它们的大小会相差很大)。
我目前的方法是使用 Google Collection 的 MapMaker,如下所示:
这看起来很有吸引力,因为它应该在需要更多 RAM 时自动删除元素,但是有一个严重的问题:它的行为是填满所有可用的 RAM,此时 GC 开始颠簸,整个应用程序的性能急剧下降。
我听说过 EHCache 之类的东西,但对于我需要的东西来说它似乎很重,而且我不确定它对于我的应用程序是否足够快(记住该解决方案不能比 HashMap 慢得多) .
java - 有没有简单的方法来改变未来> 走进未来?
我有一些代码可以将请求提交给另一个线程,该线程可能会也可能不会将该请求提交给另一个线程。这会产生一个返回类型Future<Future<T>>
。是否有一些不令人发指的方法可以立即将其转变为Future<T>
等待整个未来链完成的过程?
我已经在使用 Guava 库来处理其他有趣的并发内容,并作为 Google Collections 的替代品,它运行良好,但我似乎找不到适合这种情况的东西。
java - google 的 ImmutableList 和 Collections.unmodifiableList() 有什么区别?
来自 ImmutableList javadocs:
与 Collections.unmodifiableList(java.util.List) 不同,后者是仍然可以更改的单独集合的视图,ImmutableList 的实例包含自己的私有数据并且永远不会更改。ImmutableList 对于公共静态最终列表(“常量列表”)很方便,还可以让您轻松地制作由调用者提供给您的类的列表的“防御性副本”。
是不是意味着:
- 如果我有 Dimension 对象的 ImmutableList(例如),那么我不能更改其中的任何 Dimension 对象?
- 如果我有 Dimension 对象的 Collections.unmodifiableList (列表),那么我不仅可以添加或删除任何对象,而且可以更改它们(例如调用 setDimension(width, height) 方法)?
java - google-collection 的 LazyMap 在哪里?
apache commons-collections 中我最喜欢的一个是 LazyMap,它在执行map.get(newKey); // Will not return null!
.
为什么谷歌收藏没有相同的?
java - 具有值(等于)相等性的 SoftReference 的潜在用途
我之前得出的结论是,如果您需要一个基于值(等于)的等式的 SoftReference,那么一个人的设计就很糟糕,除了一个内部人员。这是在 Google Collections 和 Guava 之后,不包括此类。但是我遇到了一个我认为可以使用这样一个对象的问题。
我们在视觉效果渲染农场中有一个资产管理系统,其中有 100 个进程在运行相同的作业,只是渲染的帧数不同。我们有一个 Oracle 数据库,需要记录所有使用的资产。在中间层资产管理系统中,我们可以使用 HashSet 来记录是否将插入 Oracle 的对象,而不是用相同的插入来冲击 Oracle。
我可以使用具有过期时间的 Google MapMaker,但我不想担心过期时间是否正确,我们的渲染可以在数小时内运行,有些则在几天内运行。使用具有等于相等性的 SoftReference 听起来是一种更好的方法,因此 JVM 将自动管理垃圾收集。
对于我想使用带有垃圾收集的 ConcurrentHashMap 解决的其他问题,我将使用 HashMap 中的强引用作为获取 equals() 相等性的关键,并将 SoftReference 作为值,以便 JVM 可以垃圾收集某些东西,但是在这个在这种情况下,值无关紧要,我没有值可以包装在 SoftReference 中以放在那里。因此,似乎使用带有 equals() 的 SoftReference 可以解决问题。
对此有何其他建议?
java - 为什么 ImmutableList.of() 和朋友禁止空元素?
总结几乎说明了一切。这是相关的代码片段ImmutableList.createFromIterable()
:
我已经多次遇到这种情况,不明白为什么通用库函数应该施加这种限制。
编辑 1:通过“通用”,我会对 95% 的情况感到满意。但我认为我还没有写过 100 个调用ImmutableList.of()
,并且不止一次被这个问题所困扰。不过,也许我是个异类。:)
编辑 2:我想我最大的抱怨是,这在与标准java.util
集合交互时会产生“打嗝”。正如您在演讲中指出的那样null
,集合中 s 的问题可能会在远离插入这些空值的位置出现。但是,如果我有一长串代码将空值放在一个标准集合中并在另一端正确处理它们,那么我无法在此过程中的任何时候替换谷歌集合类,因为它会立即扔一个NullPointerException
。
java - 使用迭代器填充集合
Google Collections 有一个Iterables实用程序类,用于接收集合和可迭代并将所有可迭代元素放入集合中,称为addAll
. 当您只有一个迭代器时,是否有类似的东西?
java - WeakHashMap 是否有 java.util.concurrent 等价物?
Collections.synchronizedMap()
可以在不使用同时保持并发正确性的情况下重写以下代码吗?
即有没有来自 java.util.concurrent 的东西可以用来代替?请注意,仅替换为
显然行不通