我想用 Iterable 在 Java 中初始化一个 Set Implementation (HashSet)。但是,HashSet 的构造函数不接受 Iterables,只接受 Collections 类型的对象。
有没有一种方法可以从 Iterable 转换为 Collections 的某些子类型。
原文由 VaidAbhishek 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想用 Iterable 在 Java 中初始化一个 Set Implementation (HashSet)。但是,HashSet 的构造函数不接受 Iterables,只接受 Collections 类型的对象。
有没有一种方法可以从 Iterable 转换为 Collections 的某些子类型。
原文由 VaidAbhishek 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以使用 番石榴。
Set<T> set = Sets.newHashSet(iterable);
或者让它读起来像一个静态导入的句子,
import static com.google.common.collect.Sets.*;
Set<T> set = newHashSet(iterable);
原文由 ConnorWGarvey 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
HashSet
constructor relies on more than whatIterable
offers: it wants to know thesize
of the collection up front in order to optimally construct the underlyingHashMap
。如果你有一个真正的、朴素的Iterable
,它不知道它的大小,那么你必须预先意识到Iterable
把它变成一个普通的Collection
以多种显而易见的方式中的任何一种。另一方面,如果你有一个已经知道它的大小的更丰富的对象,那么创建一个将你的
Iterable
包装到一个集合中的极简适配器类是值得的,只实现size
除了将呼叫转接至iterator
。