0

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

正如我在 Scala 中理解的那样,当组合两个不可变列表时,不会发生深拷贝。然而,java 中可用的不可变列表,如番石榴,是防御性副本。(如果我错了请纠正我)

所以我的问题很简单:

  1. 是否有一些 Java 不可变列表与 scala 不可变列表具有相同的行为?
  2. 如果第一个问题的答案是否定的,那么在 java 代码中使用 scala 不可变集合的一般(标准)方法是什么?

非常感谢。

4

1 回答 1

3

Scala Lists 是一个所谓的持久化集合,持久化指的是不会发生防御性复制的事实。如果你用谷歌搜索Java persistent collection你应该找到几个链接来帮助你开始。除此之外,还有许多旨在将函数式编程的精髓带入 Java 的库。由于持久性集合本质上是功能性的,因此这些框架通常包含它们自己的集合实现。我使用过并且可以推荐的两个库是JavaslangFunctional Java,但还有比这两个更多的库(例如pccollectionsjOOλ,...)。

至于从 Java 中使用 Scala 集合,我一直觉得这有点尴尬。我建议编写一个 Scala 类/对象,它可以让您轻松(从 Java 轻松)访问scala.collection.JavaConverters,以便您可以公开您的scala.collection.immutable.Listas ajava.util.List并使用该接口。

于 2016-01-05T09:46:55.587 回答