Jas*_*n S 12 java functional-programming data-structures
这与另一个问题(Java中的Functional Data Structures)非常相似,但其答案并不特别有用.
我需要使用标准的Java集合不可改变的版本(如HashMap中/ TreeMap中/的ArrayList/LinkedList的/ HashSet的/ TreeSet中).通过"不可改变的"我的意思是不可改变的功能性意义(如纯功能性数据结构),其中对数据结构的更新操作不改变原始数据,而是返回相同类型的数据结构的新实例.通常,数据结构的新旧实例将共享不可变数据以在时间和空间上有效.
据我所知,我的选择包括:
但我不确定这些是否对我特别有吸引力.我有一些要求/愿望:
有问题的集合应该可以直接在Java中使用(在类路径中使用适当的库).FJ会为我工作; 我不确定我是否可以在Java中使用Scala或Clojure的数据结构,而不必使用这些语言的编译器/解释器,而不必编写Scala或Clojure代码.
列表/贴图/集合上的核心操作应该是可能的,不必创建具有令人困惑的语法的函数对象(FJ看起来略微不确定)
它们应该在时间和空间上有效.我正在寻找一个理想情况下已经完成一些性能测试的库.FJ的TreeMap基于红黑树,不知道如何评价.
文档/教程应该足够好,以便有人可以快速使用数据结构.FJ在那方面失败了.
有什么建议?
在我看来,你已经知道你的选择是什么,你只是对它们中的任何一个都不满意.以下是我对您提供的三个选项的看法:
功能性Java - 这个似乎最适合您.除了您不喜欢文档之外,它符合您的所有要求.从我的角度来看,文档看起来很基本,但是可以使用.他们的代码片段可以帮助您快速启动并运行.学习曲线似乎几乎不存在,这应该有助于减少文档的缺乏.仅供参考,核心Java的TreeMap也基于红黑树.
斯卡拉 - 如果我穿着你的鞋子,这是我的选择.您似乎不想学习新语言,但Scala是一个非常容易从Java过渡的过程.你可以先编写非常类似于java的代码,然后慢慢采用更多功能的习惯用法.Java < - > Scala互操作在两个方向上都很出色.
Clojure - 尽管我喜欢Clojure,但由于java开发人员的语法和学习曲线截然不同,因此很难在这个特定实例中推荐.