0

Can't understand why the following rxscala code is not working as expected:

import rx.lang.scala.Observable

object MyTest extends App {

  case class ProjectEvent(projectName: String, description: String)

  val projectEvents: Observable[ProjectEvent] = Observable.just(
    ProjectEvent("aaa", "d1"),
    ProjectEvent("bbb", "d2"),
    ProjectEvent("aaa", "d3")
  )

  lazy val grouped = projectEvents.groupBy(_.projectName).map { case (projectName, eventsOfThisProject) =>
    println("projectName: " + projectName)
    eventsOfThisProject.foreach(x => "######### event in project " + projectName + ": " + x)
    (projectName, eventsOfThisProject)
  }

  grouped.foreach(println)
}

I grouped the projectEvents by the projectName and want to print the items of each project. But when I run this code, it only prints:

projectName: aaa
(aaa,rx.lang.scala.JavaConversions$$anon$2@49de17f4)
projectName: bbb
(bbb,rx.lang.scala.JavaConversions$$anon$2@52f6438d)

There is no ######### event in project printed.

I can't understand why, is there anything I missed?

Freewind
  • 193,756
  • 157
  • 432
  • 708

1 Answers1

1

You forgot to use println in this line:

eventsOfThisProject.foreach(x => "######### event in project " + projectName + ": " + x)

The function in foreach just converts x to a String but doesn't print it.

zsxwing
  • 20,270
  • 4
  • 37
  • 59