Java中的function数据结构

Java标准库是否具有function更新的任何function数据结构,如不可变集,列表等?

functionjava具有集合,列表和更有趣的抽象。

看看pcollections项目:

PCollections充当Java Collections Framework的持久且不可变的模拟。 这包括高效,线程安全,通用,不可变和持久的堆栈,映射,向量,集合和包,与其Java Collections对应物兼容。

持久性和不可变数据类型越来越多地被认为是一种简单,设计友好,并发友好,有时候是可变数据类型的时间和空间效率更高的替代方法。

听起来你在寻找Scala 。 它编译成.class,这样就够了,对吧?

那么,有两种可能的方法来“改变”不可变集合:

  • 制作包含“更改”的副本

  • 创建一个新的不同对象,该对象包含对原始对象的引用和对更改描述的引用。

Clojure采用后一种方法,因此创建原始集合的许多兄弟姐妹变得相当快,每个兄弟都有微小的修正,并且具有合理的内存要求。 但是大多数Java代码都倾向于第一种选择。

对于它的价值,Google创建了一些支持function风格编程的集合: http : //code.google.com/p/google-collections/但我没有深入研究它们。

你不需要scala。 只需将您的collections传递给:

java.util.Collections.unmodifiableCollection(/* Collection c */); java.util.Collections.unmodifiableSet(Set s); java.util.Collections.unmodifiableMap(Map m); java.util.Collections.unmodifiableList(List l); 

我刚从另一个SO问题中看到了这个:

谷歌的ImmutableSet

http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/ImmutableSet.html

来自文档:

与Collections.unmodifiableSet(java.util.Set)不同,后者是一个可以更改的单独集合的视图,此类的实例包含其自己的私有数据,并且永远不会更改。 这个类对于公共静态最终集(“常量集”)很方便,也可以让你轻松地为调用者提供给你的类的集合制作一个“防御性副本”。

编辑以纳入评论。

看到Google Collections插件总是很好,但不,我们没有这个。 我不知道任何Java库。 在Google内部,我们实现了一些function列表结构,猜猜是什么? 没有人使用它们。 所以他们不太可能很快成为开源的。

如果您对函数式的集合操作感兴趣,请查看lambdaj

字符串和数字在function方面是不可变的,但大多数集合不是(不可变集合在添加,删除等时抛出exception)。 CopyOnWriteArrayListCopyOnWriteArraySet在这个意义上是最接近的。

我知道这是一个古老的问题但是一些搜索告诉我现在我们有一个替代functionJava。

JavasLang看起来像一个有趣的库,用于Java中的声明性编程和function数据结构。

我没有在function易用性和性能方面将它与functionJava进行比较,但我很想得到任何指示。

看看Google系列 。