How to use foreach-loop in Scala that mutates an object?

I use Scala and JDBC, now I want to reuse PreparedStatementto do multi-insert. I want to use foreach-loop over an array, but I cannot figure it out with Scala.

val stmt = conn.prepareStatement(insertStatement)

// wrong Scala
items.foreach(item : MyItem =>
    stmt.setInt(1, item.id)
    stmt.setInt(2, item.value)
    stmt.executeUpdate()
    )

itemsis an array containing several MyItem.

How can I write this foreach loop in Scala and reuse it PreparedStatement?

+5
source share
2 answers

You need to use curly braces for the argument foreachif you want to be interpreted as a multitasking block (what you do).

, , , . REPL-, foreach ( StringBuilder ):

scala> val sb = new java.lang.StringBuilder
sb: java.lang.StringBuilder =

scala> val items = List("tinker", "tailor", "soldier", "spy")
items: List[java.lang.String] = List(tinker, tailor, soldier, spy)

scala> items.foreach { item =>
     |   sb.append(item)
     |   sb.append("; ")
     |   println(sb)
     | }
tinker;
tinker; tailor;
tinker; tailor; soldier;
tinker; tailor; soldier; spy;

( foreach <console>:3: error: ')' expected but '.' found.)

+19

, Andrzej , infix :

val sb = new java.lang.StringBuilder

val items = List("tinker", "tailor", "soldier", "spy")

items foreach { item =>
  sb append item
  sb append "; "
  println(sb)
}

, , map, flatMap, foreach filter

+11

All Articles