问题标签 [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 - Google Collections 供应商和查找
我正在寻找一种 Google Collections 方法,该方法返回不返回 null 的供应商序列的第一个结果。
我正在考虑使用 Iterables.find() 但在我的谓词中,我必须调用我的供应商以将结果与 null 进行比较,然后在 find 方法返回供应商后再次调用它。
java - 使用谷歌收藏过滤和排序列表
假设我有一个列表(或集合):
我想取回一个 ImmutableList(Set),它按自然顺序对术语进行排序/分组,其中以“src”开头的术语是第一个,“assoc”第二个,“dest”最后。如果一个术语不包含那些,那么它应该从结果列表中删除。
因此这里的结果是“srcB”、“srcT”、“assocX”、“destA”。
我想我可以通过 Iterables.filter 或 Predicates 的某种组合来做到这一点,但只是看不到它。我认为必须有一种简洁的方法。
编辑:代替列表的集合也可以。
java - 确保元素唯一性的队列?
我正在寻找 java.util.Queue 的实现或谷歌集合中的东西,它们的行为类似于队列,但还要确保队列的每个元素都是唯一的。(所有进一步的插入都没有效果)
这是可能的,还是我必须手动完成?
现在我使用的是一个队列,一个 LinkedList 实现,我在插入之前检查了唯一性。(我使用侧地图来执行此操作,在队列之前/之后从侧地图中添加/删除元素)。我不太喜欢它。
欢迎任何意见。如果它不在 java.util 包中,那么也许这是一个坏主意?
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
)。
这两个类的来源是相同的,除了:
AndPredicate
vsOrPredicate
(每个在同类中出现 5 次)"And("
vsOr("
(在各自的toString()
方法中)#and
vs#or
(在@see
Javadoc 注释中)true
vsfalse
(inapply
;!
可以改写出表达式)-1 /* all bits on */
与0 /* all bits off */
在hashCode()
&=
与|=
在hashCode()
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(...)
.
java - 为什么 Google Collections 不像 Apache Collections 那样支持 MultiKeyMap?
谷歌的决定是否类似于SortedMultiSet
(stackoverflow question)的决定,
还是因为没有使用MultiKeyMap
?
我知道替代方法MultiKeyMap
可以是使用自定义类作为键,其中包含多个键作为其类成员。相反,我喜欢在调用 .get 的时候指定多个键的概念MultiKeyMap
。
Apache 的版本MultiKeyMap
很棒,但我严重缺少泛型,因此研究了谷歌集合以获取它的现代实现。如果有人知道为什么 Google 还不支持它,或者有更好的替代方案,请回复。
java - Joiner 线程安全吗?
谷歌收藏 Joiner 线程安全吗?
java - 在 GWT 中使用 Google Common Collection
这是一个简单的问题,但我遇到了问题......
我正在尝试Objects.equal()
在 GWT 客户端代码中使用 Google 通用集合的方法,但我不断收到错误消息
20:12:10.001 [错误] [gwt_regex] 第 39 行:没有可用于类型 com.google.common.base.Objects 的源代码;你忘了继承一个必需的模块吗?
试图向谷歌寻求答案,但找不到任何答案——每个人都只是说“谷歌收藏应该与 GWT 一起工作”。
java - 从 Multiset 中删除集合的出现
似乎Multiset中应该有一个removingAllOccuring(Collection)(或类似的)方法。类似于remove(Object,int)和removeAll(Collection)。缺少这种方法,实现其意图的最佳方法是什么。我写了一个小的 JUnit 驱动来演示:
输出:
我在想可能有一种方法,前提是我丢失了,或者有一种不同/更好的方法,而不是循环遍历要删除的集合。另请注意,我可以很容易地有一个用例,其中要删除的集合是List
java - 在 Java 中实例化 google-collections 的 BiMap
你怎么能实例化一个Bimap
谷歌集合?
我读过问题Java: Instantiate Google Collection's HashBiMap
我的代码示例
我明白了cannot instantiate the type BiMap<String, Integer>
。