Skip to content

Commit df3ed45

Browse files
committed
Code sample for filter and takeWhile method differences
1 parent 3f7457c commit df3ed45

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

build.sbt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,13 @@ lazy val scala_core_collections_3 =
208208
libraryDependencies ++= scalaTestDeps
209209
)
210210

211+
lazy val scala_core_collections_4 =
212+
(project in file("scala-core-collections-modules/scala-core-collections-4"))
213+
.settings(
214+
scalaVersion := scala3Version,
215+
libraryDependencies ++= scalaTestDeps
216+
)
217+
211218
lazy val scala_core_map =
212219
(project in file("scala-core-collections-modules/scala-core-map"))
213220
.settings(
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## Relevant Articles
2+
3+
-
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.baeldung.scala.filtertakewhile
2+
3+
import org.scalatest.matchers.should.Matchers
4+
import org.scalatest.wordspec.AnyWordSpec
5+
6+
import java.time.{LocalDate, LocalDateTime}
7+
import scala.concurrent.{Await, Future, TimeoutException}
8+
import scala.concurrent.ExecutionContext.Implicits.global
9+
import scala.concurrent.duration.*
10+
11+
class FilterAndTakeWhileUnitTest extends AnyWordSpec with Matchers {
12+
13+
"filter" should {
14+
"filter all elements matching the condition" in {
15+
val numbers = List(1, 2, 3, 4, 5, 6)
16+
val oddNumbers = numbers.filter(_ % 2 != 0)
17+
oddNumbers shouldBe List(1, 3, 5)
18+
}
19+
20+
"not complete the execution due to infinite collection" in {
21+
val infiniteNumbers = LazyList.from(1)
22+
val lessThan100Future = Future(infiniteNumbers.filter(_ < 100).toList)
23+
val lessThan100 =
24+
intercept[TimeoutException](Await.result(lessThan100Future, 1.seconds))
25+
lessThan100.getMessage should include("Future timed out")
26+
}
27+
}
28+
29+
"takeWhile" should {
30+
"select elements until the predicate fails" in {
31+
val numbers = List(1, 2, 3, 4, 5, 6)
32+
val numbersBeforeFirstEven = numbers.takeWhile(_ % 2 != 0)
33+
numbersBeforeFirstEven shouldBe List(1)
34+
}
35+
36+
"successfully get result from an infinite collection" in {
37+
val infiniteNumbers = LazyList.from(1)
38+
val first100 = infiniteNumbers.takeWhile(_ < 100).toList
39+
first100 shouldBe (1 to 99).toList
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)