set.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 73 行
SCALA
73 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id: Set.scala 14532 2008-04-07 12:23:22Z washburn $package scala.collection.jcl/** Analogous to a Java set. * * @author Sean McDirmid */trait Set[A] extends scala.collection.mutable.Set[A] with Collection[A] { final def contains(a : A) = has(a) /** Add will return false if "a" already exists in the set. **/ override def add(a: A): Boolean override def ++(i: Iterable[A]) : this.type = super[Collection].++(i) override def --(i: Iterable[A]) : this.type = super[Collection].--(i) override def +(t: A) : this.type = super[Collection].+(t) override def -(t: A) : this.type = super[Collection].-(t) override final def retain(f: A => Boolean) = retainOnly(f) override def isEmpty = super[Collection].isEmpty override def clear() = super.clear() override def subsetOf(set : scala.collection.Set[A]) = set match { case set : Set[_] => set.hasAll(this) case set => super.subsetOf(set) } override def transform(f: A => A) = { var toAdd : List[A] = Nil val i = elements while (i.hasNext) { val i0 = i.next val i1 = f(i0) if (i0 != i1) { i.remove; toAdd = i1 :: toAdd } } addAll(toAdd) } class Filter(pp : A => Boolean) extends super.Filter with Set.Projection[A] { override def p(a : A) = pp(a) override def retainOnly(p0 : A => Boolean): Unit = Set.this.retainOnly(e => !p(e) || p0(e)) override def add(a : A) = { if (!p(a)) throw new IllegalArgumentException else Set.this.add(a) } } override def projection : Set.Projection[A] = new Set.Projection[A] { override def add(a: A): Boolean = Set.this.add(a) override def elements = Set.this.elements override def size = Set.this.size override def has(a : A) : Boolean = Set.this.has(a) }}object Set { trait Projection[A] extends Collection.Projection[A] with Set[A] { override def filter(p : A => Boolean) : Projection[A] = new Filter(p); override def projection = this } def apply[T](set : java.util.Set[T]) = new SetWrapper[T] { val underlying = set }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?