我正在尝试用java激发灵感,但我被java中不可变的集合卡住了。
正如我在Scala中所理解的,当两个不可变列表组合在一起时,不会发生深度复制。然而,java中可用的不可变列表,如guava,可以进行防御复制。(如果我错了,请纠正我)
所以我的问题很简单:
- 是否有一些Java不可变列表具有与scala不可变列表
- 如果第一个问题的答案是否定的,那是什么在java代码中使用scala不可变集合的通用(标准)方法
非常感谢。
Scala Lists是一个所谓的持久化集合,持久化指的是没有发生防御复制的事实。如果你在谷歌上搜索Java persistent collection
,你应该会找到几个链接来开始。除此之外,还有许多库旨在将函数式编程的精髓引入Java。由于持久集合具有固有的功能,这些框架通常包括自己的集合实现。我曾经合作过并可以推荐的两个库是Javasland和Functional Java,但它们比这两个库更多(例如pccollections、jOOλ…)。
至于使用Java中的Scala集合,我一直觉得这有点尴尬。我建议编写一个Scala类/对象,它可以让您轻松地(从Java轻松地)访问scala.collection.JavaConverters
,这样您就可以将scala.collection.immutable.List
公开为java.util.List
并使用该接口。