java Guava 和 Scala 之间不可变列表的串联差异

Difference on concatenation for immutable list between java Guava and Scala

我正在尝试使用 java 进行 spark,但我被 java 中的不可变集合卡住了。

正如我在 Scala 中理解的那样,当两个不可变列表组合在一起时,不会发生深度复制。然而,java 中可用的不可变列表,如番石榴,会进行防御性复制。 (如果我错了请纠正我)

所以我的问题很简单:

  1. 是否有一些 Java 不可变列表与 Scala 不可变列表 ?
  2. 如果第一个问题的答案是否定的,请问 在 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] =] 并使用该界面。