有很多常见的概念:
- 不可变集合(immutable collection)
- 集合视图(collection view)
- 严格/非严格集合(strict/non-strict collection)
- 集合构造器(collection builders)
Guava和Scala Collection API中都有相同的模式。那么它们之间有什么区别?这两个库的模式是否一致?扩展性是否足够好?
因此,我想听听同时使用它们的人对这些框架的比较。
有很多常见的概念:
Guava和Scala Collection API中都有相同的模式。那么它们之间有什么区别?这两个库的模式是否一致?扩展性是否足够好?
因此,我想听听同时使用它们的人对这些框架的比较。
Google Guava是一个很棒的库,毫无疑问。然而,它是用Java实现的,受到了所有相关限制的影响:
Guava还必须存在于Java标准集合库的存在下,因此很少有第三方库会公开支持guava兼容函数字面量或使用guava特定的集合类型。这会导致每次使用第三方库时都会出现阻抗失配。例如,您通常需要将这些库返回的集合转换为适当的guava不可变集合,尤其是在多线程环境下工作时。
Scala集合具有更好地集成到语言中的设计,您将在整个scala标准库和通过Scala实现的第三方产品中广泛使用它们。Scala集合默认也是不可变的,因此您会得到更安全的代码,无需额外的防御性封装。
如果您可以使用Scala,请这样做,它除了集合框架之外还具有许多优点。如果必须使用Java,则Guava是一个很好的选择,特别是考虑到没有Scala提供的语言功能,Scala集合并不特别容易使用。
在混合项目中,从Scala内部完全可以使用Guava集合,但语言还提供了机制,允许您像使用自己的Scala集合一样使用Java集合(包括暴露相同接口的Guava集合)。
我现在在所有的Java项目中都使用Guava。它为Java集合提供了一种很好的函数式风格。
然而,在Java中编写闭包意味着直接定义大量匿名类,这是冗长和无聊的。
Scala集合在设计(由于特质而导致的部分实现级联)和功能方面仍然优越。只需实现一小组方法即可创建自己的集合并获得所有Scala集合的优势。