是否有针对Guava MultiSet和Table概念的scala替代品?

Jas*_*Jas 3 scala guava scala-collections

使用番石榴TableMultisetscala?scala中是否已经有不同的构思,而不是为此用法导入guava库?

sen*_*nia 5

你可以使用Map[(R, C), V],而不是Table<R, C, V>Map[T, Int]代替Multiset<T>.您还可以添加这样的辅助方法Map[T, Int]:

implicit class Multiset[T](val m: Map[T, Int]) extends AnyVal {
  def setAdd(e: T, i: Int = 1) = {
    val cnt = m.getOrElse(e, 0) + i
    if (cnt <= 0) m - e
    else m.updated(e, cnt)
  }
  def setRemove(e: T, i: Int = 1) = setAdd(e, -i)
  def count(e: T) = m.getOrElse(e, 0)
}

val m = Map('a -> 5)

m setAdd 'a
// Map('a -> 6)

m setAdd 'b
// Map('a -> 5, 'b -> 1)

m setAdd ('b, 10)
// Map('a -> 5, 'b -> 10)

m setRemove 'a
// Map('a -> 4)

m setRemove ('a, 6)
// Map()

m count 'b
// 0

(m setAdd 'a) count 'a
// 6
Run Code Online (Sandbox Code Playgroud)