似乎MultiMap的addBinding不保留绑定到同一个键的值的插入顺序,因为它使用的基础机制是HashSet。使用MultiMap保留插入顺序的惯用方法是什么?
答案 0 :(得分:6)
基于MultiMap
执行状态:
/** Creates a new set.
*
* Classes that use this trait as a mixin can override this method
* to have the desired implementation of sets assigned to new keys.
* By default this is `HashSet`.
*
* @return An empty set of values of type `B`.
*/
protected def makeSet: Set[B] = new HashSet[B]
您可以简单地定义:
trait OrderedMultimap[A, B] extends MultiMap[A, B] {
override def makeSet: Set[B] = new LinkedHashSet[B]
}
答案 1 :(得分:0)
一种方法可能是回退到常规Map(而不是MultiMap),使用值类型的集合,而该集合将是可以强制执行订单的集合类型(即不是Set)。据我了解,为了保持允许元素重复的更广泛意义上的插入顺序,要使用的自然Scala集合将是Seq实现(例如Vector或Queue,具体取决于访问模式)。