Skip to content

Commit 9fcbb85

Browse files
committed
s.c.convert.JSetWrapper#filterInPlace delegates to underlying#removeIf
1 parent 439ed61 commit 9fcbb85

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

src/library/scala/collection/convert/Wrappers.scala

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,26 +194,34 @@ private[collection] trait Wrappers {
194194
@SerialVersionUID(3L)
195195
case class JSetWrapper[A](underlying: ju.Set[A]) extends mutable.AbstractSet[A] with mutable.SetOps[A, mutable.Set, mutable.Set[A]] {
196196

197-
override def size = underlying.size
197+
override def size: Int = underlying.size
198198
override def isEmpty: Boolean = underlying.isEmpty
199199
override def knownSize: Int = if (underlying.isEmpty) 0 else super.knownSize
200-
def iterator = underlying.iterator.asScala
200+
def iterator: Iterator[A] = underlying.iterator.asScala
201201

202202
def contains(elem: A): Boolean = underlying.contains(elem)
203203

204204
def addOne(elem: A): this.type = { underlying add elem; this }
205205
def subtractOne(elem: A): this.type = { underlying remove elem; this }
206206

207207
override def remove(elem: A): Boolean = underlying remove elem
208-
override def clear() = underlying.clear()
209208

210-
override def empty = JSetWrapper(new ju.HashSet[A])
209+
override def clear(): Unit = {
210+
underlying.clear()
211+
}
212+
213+
override def empty: mutable.Set[A] = JSetWrapper(new ju.HashSet[A])
214+
211215
// Note: Clone cannot just call underlying.clone because in Java, only specific collections
212216
// expose clone methods. Generically, they're protected.
213-
override def clone() =
214-
new JSetWrapper[A](new ju.LinkedHashSet[A](underlying))
217+
override def clone(): mutable.Set[A] = new JSetWrapper[A](new ju.LinkedHashSet[A](underlying))
218+
219+
override def iterableFactory: IterableFactory[mutable.Set] = mutable.HashSet
215220

216-
override def iterableFactory = mutable.HashSet
221+
override def filterInPlace(p: A => Boolean): this.type = {
222+
if (underlying.size() > 0) underlying.removeIf(!p(_))
223+
this
224+
}
217225
}
218226

219227
@SerialVersionUID(3L)

test/junit/scala/collection/convert/JSetWrapperTest.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package scala.collection.convert
22

33
import java.{util => ju}
44

5-
import org.junit.Assert.assertTrue
5+
import org.junit.Assert._
66
import org.junit.Test
77
import org.junit.runner.RunWith
88
import org.junit.runners.JUnit4
@@ -20,4 +20,15 @@ class JSetWrapperTest {
2020
assertTrue(sSet.isInstanceOf[Wrappers.JSetWrapper[_]])
2121
assertTrue(sSet.iterator.sameElements(Set(1, 2, 3)))
2222
}
23+
24+
@Test
25+
def testFilterInPlace(): Unit = {
26+
val jSet: ju.Set[Int] = new ju.HashSet(ju.Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
27+
val sSet: collection.mutable.Set[Int] = jSet.asScala
28+
29+
sSet.filterInPlace(_ % 2 == 0)
30+
31+
assertEquals(sSet, Set(2, 4, 6, 8, 10))
32+
}
33+
2334
}

0 commit comments

Comments
 (0)