【问题标题】:Difference on concatenation for immutable list between java Guava and Scalajava Guava和Scala之间不可变列表的连接差异
【发布时间】:2016-01-05 17:46:55
【问题描述】:

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

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

所以我的问题很简单:

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

非常感谢。

【问题讨论】:

  • Guava 集合在修改时不会复制所有数据。它们的实现类似于 Scala 所做的。
  • 嗨 Dima,为了做类似 newList = oldList.append(a) 之类的事情,我认为 Guava 不可变列表会将所有数据从 oldList 和 a 复制到 newList,不是吗?或者在什么情况下番石榴可以避开防御副本?谢谢
  • 不,这不是真的。就像我说的,guava 的集合实现与 scala 中的类似。
  • @Dima,什么?这是绝对正确的,它与 Scala 的实现不相似。是什么给了你这样的印象?

标签: java scala immutable-collections


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2019-06-06
    • 2015-02-24
    • 2017-01-07
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多