Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:用于不可变函数式数据结构的库_Java_Data Structures_Functional Programming - Fatal编程技术网

java:用于不可变函数式数据结构的库

java:用于不可变函数式数据结构的库,java,data-structures,functional-programming,Java,Data Structures,Functional Programming,这与另一个问题()非常相似,但答案并不特别有用 我需要使用标准Java集合的不可变版本(例如HashMap/TreeMap/ArrayList/LinkedList/HashSet/TreeSet)。“不可变”指的是功能意义上的不可变(例如,数据结构上的更新操作不会更改原始数据,而是返回相同类型数据结构的新实例)。通常,数据结构的新实例和旧实例将共享不变的数据,从而在时间和空间上都很有效 据我所知,我的选择包括: 但我不确定这些是否对我特别有吸引力。我有几个要求/愿望: 所讨论的集合

这与另一个问题()非常相似,但答案并不特别有用

我需要使用标准Java集合的不可变版本(例如HashMap/TreeMap/ArrayList/LinkedList/HashSet/TreeSet)。“不可变”指的是功能意义上的不可变(例如,数据结构上的更新操作不会更改原始数据,而是返回相同类型数据结构的新实例)。通常,数据结构的新实例和旧实例将共享不变的数据,从而在时间和空间上都很有效

据我所知,我的选择包括:

但我不确定这些是否对我特别有吸引力。我有几个要求/愿望:

  • 所讨论的集合应该可以直接在Java中使用(在类路径中有适当的库)。FJ会为我工作;我不确定是否可以在Java中使用Scala或Clojure的数据结构,因为我必须使用这些语言的编译器/解释器,而且我还必须编写Scala或Clojure代码

  • 列表/地图/集合上的核心操作应该是可能的,而不必创建语法混乱的函数对象(FJ看起来有点不确定)

  • 它们在时间和空间上都应该是高效的。我正在寻找一个理想情况下已经做过一些性能测试的库。FJ基于一棵红黑树,不确定它的评级

  • 文档/教程应该足够好,以便有人能够快速开始使用数据结构。FJ在这方面失败

有什么建议吗?

Scala

您可以从另一种语言中的方法调用这两种语言的方法


在我看来,你已经知道你的选择是什么,只是对其中任何一个都不满意。以下是我对您提供的三种选择的看法:

功能性Java-这一款似乎最适合您。它符合您的所有要求,只是您不喜欢文档。从我的角度来看,文档看起来很基本,但可以使用。他们会让你迅速站起来跑步。学习曲线似乎几乎不存在,这有助于缓解文档的缺乏。仅供参考,核心Java也基于红黑树

Scala-如果我站在你的立场上,我会做出这个选择。您似乎不想学习一门新语言,但Scala是从Java非常容易的过渡。您可以先编写非常类似java的代码,然后慢慢采用更多的函数式习惯用法。JavaScala互操作在两个方面都非常出色


Clojure-虽然我非常喜欢Clojure,但由于java开发人员的语法截然不同,学习曲线陡峭,因此在这种情况下很难推荐Clojure。

也许谷歌的guava库有一些用处:

我花了一些时间使Clojure持久/不可变数据结构在Java中工作,并将合理的构造函数和泛型作为其一部分

这还包括
@ImmutableValue
类,用于确保不仅集合是不可变的,而且您在其中输入的值也是不可变的


希望这有帮助。

谢谢。这并不是说我对他们中的任何一个都不满意,只是我对他们不熟悉,不幸的是,我没有太多时间自己做出明智的决定(因此这个问题)。一般来说,我不介意学习一门新语言,但它对维护/查看我的代码的任何人都有限制。我想我也倾向于Scala;我的书架上有“用Scala编程”,只是我似乎永远无法正确使用它的语法。@Jason S:我认为投资Scala是值得的。这是一门很棒的语言,还有