java Guava 和 Scala 之间不可变列表的串联差异
Difference on concatenation for immutable list between java Guava and Scala
我正在尝试使用 java 进行 spark,但我被 java 中的不可变集合卡住了。
正如我在 Scala 中理解的那样,当两个不可变列表组合在一起时,不会发生深度复制。然而,java 中可用的不可变列表,如番石榴,会进行防御性复制。 (如果我错了请纠正我)
所以我的问题很简单:
- 是否有一些 Java 不可变列表与
Scala 不可变列表 ?
- 如果第一个问题的答案是否定的,请问
在 java 代码中使用 scala 不可变集合的一般(标准)方法
?
非常感谢。
Scala Lists 是一个 so-called 持久性集合,持久性指的是没有防御性复制发生。如果你 google Java persistent collection
你应该找到几个链接来帮助你开始。除此之外,还有许多旨在将函数式编程的精髓带入 [=22=] 的库。由于持久性集合本质上是功能性的,因此这些框架通常包括它们自己的集合实现。我使用过并可以推荐的两个库是 Javaslang and Functional Java but there are more out there than these two (e.g. pccollections, jOOλ, …).
至于使用来自 Java 的 Scala 集合,我一直觉得这有点尴尬。我建议写一个 Scala class/object,它可以让你轻松(如 from-Java-easy)访问 scala.collection.JavaConverters
,这样你就可以将你的 scala.collection.immutable.List
公开为 [=13] =] 并使用该界面。
我正在尝试使用 java 进行 spark,但我被 java 中的不可变集合卡住了。
正如我在 Scala 中理解的那样,当两个不可变列表组合在一起时,不会发生深度复制。然而,java 中可用的不可变列表,如番石榴,会进行防御性复制。 (如果我错了请纠正我)
所以我的问题很简单:
- 是否有一些 Java 不可变列表与 Scala 不可变列表 ?
- 如果第一个问题的答案是否定的,请问 在 java 代码中使用 scala 不可变集合的一般(标准)方法 ?
非常感谢。
Scala Lists 是一个 so-called 持久性集合,持久性指的是没有防御性复制发生。如果你 google Java persistent collection
你应该找到几个链接来帮助你开始。除此之外,还有许多旨在将函数式编程的精髓带入 [=22=] 的库。由于持久性集合本质上是功能性的,因此这些框架通常包括它们自己的集合实现。我使用过并可以推荐的两个库是 Javaslang and Functional Java but there are more out there than these two (e.g. pccollections, jOOλ, …).
至于使用来自 Java 的 Scala 集合,我一直觉得这有点尴尬。我建议写一个 Scala class/object,它可以让你轻松(如 from-Java-easy)访问 scala.collection.JavaConverters
,这样你就可以将你的 scala.collection.immutable.List
公开为 [=13] =] 并使用该界面。