我正在尝试使用java的火花,我被Java中的不可变集合所困扰。
正如我在Scala中理解的那样,当两个不可变列表组合在一起时,不会发生深层复制。但是,java中可用的不可变列表,如番石榴,是防御性副本。 (如果我错了,请纠正我)
所以我的问题就是:
非常感谢。
答案 0 :(得分:3)
Scala Lists是一个所谓的持久性集合,持久性地指的是没有防御性复制发生的事实。如果你谷歌搜索Java persistent collection
,你应该找到几个链接来帮助你入门。除此之外,还有许多库旨在将函数式编程的本质带入Java。由于持久性集合本质上是功能性的,因此这些框架通常包括它们自己的集合实现。我与之合作并可以推荐的两个图书馆是Javaslang和Functional Java,但除此之外还有更多(例如pccollections,jOOλ,...)
至于使用Java的Scala集合,我总觉得这有点尴尬。我建议编写一个Scala类/对象,它可以让您轻松(从Java开始)访问scala.collection.JavaConverters
,这样您就可以将scala.collection.immutable.List
公开为java.util.List
并使用该界面。