问题标签 [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.

0 投票
3 回答
1508 浏览

java - Google Collections 供应商和查找

我正在寻找一种 Google Collections 方法,该方法返回不返回 null 的供应商序列的第一个结果。

我正在考虑使用 Iterables.find() 但在我的谓词中,我必须调用我的供应商以将结果与 null 进行比较,然后在 find 方法返回供应商后再次调用它。

0 投票
4 回答
47148 浏览

java - 使用谷歌收藏过滤和排序列表

假设我有一个列表(或集合):

我想取回一个 ImmutableList(Set),它按自然顺序对术语进行排序/分组,其中以“src”开头的术语是第一个,“assoc”第二个,“dest”最后。如果一个术语不包含那些,那么它应该从结果列表中删除。

因此这里的结果是“srcB”、“srcT”、“assocX”、“destA”。

我想我可以通过 Iterables.filter 或 Predicates 的某种组合来做到这一点,但只是看不到它。我认为必须有一种简洁的方法。

编辑:代替列表的集合也可以。

0 投票
8 回答
52455 浏览

java - 确保元素唯一性的队列?

我正在寻找 java.util.Queue 的实现或谷歌集合中的东西,它们的行为类似于队列,但还要确保队列的每个元素都是唯一的。(所有进一步的插入都没有效果)

这是可能的,还是我必须手动完成?

现在我使用的是一个队列,一个 LinkedList 实现,我在插入之前检查了唯一性。(我使用侧地图来执行此操作,在队列之前/之后从侧地图中添加/删除元素)。我不太喜欢它。

欢迎任何意见。如果它不在 java.util 包中,那么也许这是一个坏主意?

0 投票
9 回答
5511 浏览

java - 用 Java 管理高度重复的代码和文档

高度重复的代码通常是一件坏事,有一些设计模式可以帮助减少这种情况。但是,有时由于语言本身的限制,这只是不可避免的。从以下示例中获取java.util.Arrays

上面的代码片段在源代码中出现了 8 次,文档/方法签名几乎没有变化,但方法体完全相同,每个根数组类型int[], short[], char[], byte[], boolean[], double[],float[]Object[].

我相信,除非人们求助于反思(这本身就是一个完全不同的主题),否则这种重复是不可避免的。我知道作为一个实用程序类,如此高度集中的重复 Java 代码是非常不典型的,但即使采用最佳实践,重复也会发生!重构并不总是有效,因为它并不总是可能的(明显的情况是文档中有重复)。

显然维护这个源代码是一场噩梦。文档中的轻微错字或实现中的小错误会乘以多次重复。事实上,最好的例子恰好涉及到这个确切的类:

谷歌研究博客 - 额外的,额外的 - 阅读所有相关信息:几乎所有的二进制搜索和合并排序都被破坏了(作者 Joshua Bloch,软件工程师)

这个错误非常微妙,发生在许多人认为只是一种简单直接的算法中。

上面的代码在源代码中出现了 11 次

所以我的问题是:

  • 在实践中如何处理这些重复的 Java 代码/文档?它们是如何开发、维护和测试的?
    • 你是从“原版”开始,尽可能的成熟,然后根据需要复制粘贴,希望你没有弄错?
    • 如果您确实在原始文件中犯了错误,那么只需在所有地方进行修复,除非您对删除副本并重复整个复制过程感到满意?
    • 你也对测试代码应用同样的过程吗?
  • Java 会从针对此类事物的某种有限使用源代码预处理中受益吗?
    • 也许 Sun 有自己的预处理器来帮助编写、维护、记录和测试这些重复的库代码?

评论要求另一个示例,所以我从 Google 集合中提取了这个示例:com.google.common.base.Predicates第 276-310 行(AndPredicate)与第 312-346 行(OrPredicate)。

这两个类的来源是相同的,除了:

  • AndPredicatevs OrPredicate(每个在同类中出现 5 次)
  • "And("vs Or("(在各自的toString()方法中)
  • #andvs #or(在@seeJavadoc 注释中)
  • truevs false(in apply;!可以改写出表达式)
  • -1 /* all bits on */0 /* all bits off */hashCode()
  • &=|=hashCode()
0 投票
3 回答
6908 浏览

java - Is there a concise way to create an InputSupplier for an InputStream in Google Guava?

There are a few factory methods in Google Guava to create InputSuppliers, e.g. from a byte[]:

Or from a File:

Is there a similar way to to create an InputSupplier for a given InputStream?

That is, a way that's more concise than an anonymous class:

Background: I'd like to use InputStreams with e.g. Files.copy(...) or ByteStreams.equal(...).

0 投票
3 回答
6905 浏览

java - 为什么 Google Collections 不像 Apache Collections 那样支持 MultiKeyMap?

谷歌的决定是否类似于SortedMultiSet (stackoverflow question)的决定, 还是因为没有使用MultiKeyMap

我知道替代方法MultiKeyMap可以是使用自定义类作为键,其中包含多个键作为其类成员。相反,我喜欢在调用 .get 的时候指定多个键的概念MultiKeyMap

Apache 的版本MultiKeyMap很棒,但我严重缺少泛型,因此研究了谷歌集合以获取它的现代实现。如果有人知道为什么 Google 还不支持它,或者有更好的替代方案,请回复。

0 投票
2 回答
1989 浏览

java - Joiner 线程安全吗?

谷歌收藏 Joiner 线程安全吗?

0 投票
4 回答
5158 浏览

java - 在 GWT 中使用 Google Common Collection

这是一个简单的问题,但我遇到了问题......

我正在尝试Objects.equal()在 GWT 客户端代码中使用 Google 通用集合的方法,但我不断收到错误消息

20:12:10.001 [错误] [gwt_regex] 第 39 行:没有可用于类型 com.google.common.base.Objects 的源代码;你忘了继承一个必需的模块吗?

试图向谷歌寻求答案,但找不到任何答案——每个人都只是说“谷歌收藏应该与 GWT 一起工作”。

0 投票
1 回答
426 浏览

java - 从 Multiset 中删除集合的出现

似乎Multiset中应该有一个removingAllOccuring(Collection)(或类似的)方法。类似于remove(Object,int)removeAll(Collection)。缺少这种方法,实现其意图的最佳方法是什么。我写了一个小的 JUnit 驱动来演示:

输出:

我在想可能有一种方法,前提是我丢失了,或者有一种不同/更好的方法,而不是循环遍历要删除的集合。另请注意,我可以很容易地有一个用例,其中要删除的集合是List

0 投票
3 回答
12748 浏览

java - 在 Java 中实例化 google-collections 的 BiMap

你怎么能实例化一个Bimap谷歌集合?

我读过问题Java: Instantiate Google Collection's HashBiMap

我的代码示例

我明白了cannot instantiate the type BiMap<String, Integer>