diff --git a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala index 8cf314e0d5..7b91e29bcb 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -80,8 +80,8 @@ class SerializeSpec extends AkkaSpec(SerializeSpec.config) { "Serialization" must { "have correct bindings" in { - ser.bindings.find(_._1 == addr.getClass).map(_._2.getClass) must be(Some(classOf[JavaSerializer])) - ser.bindings.find(_._1 == classOf[PlainMessage]).map(_._2.getClass) must be(Some(classOf[TestSerializer])) + ser.bindings.collectFirst { case (c, s) if c == addr.getClass ⇒ s.getClass } must be(Some(classOf[JavaSerializer])) + ser.bindings.collectFirst { case (c, s) if c == classOf[PlainMessage] ⇒ s.getClass } must be(Some(classOf[TestSerializer])) } "serialize Address" in { diff --git a/akka-actor/src/main/scala/akka/serialization/Serialization.scala b/akka-actor/src/main/scala/akka/serialization/Serialization.scala index 2d313b05a0..1a23833383 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serialization.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serialization.scala @@ -125,11 +125,11 @@ class Serialization(val system: ExtendedActorSystem) extends Extension { def serializerFor(clazz: Class[_]): Serializer = serializerMap.get(clazz) match { case null ⇒ - val ser = bindings.find { case (c, s) ⇒ c.isAssignableFrom(clazz) } match { - case None ⇒ throw new NotSerializableException( - "No configured serialization-bindings for class [%s]" format clazz.getName) - case Some((c, s)) ⇒ s - } + val ser = bindings.collectFirst { + case (c, s) if c.isAssignableFrom(clazz) ⇒ s + } getOrElse (throw new NotSerializableException( + "No configured serialization-bindings for class [%s]" format clazz.getName)) + // memorize for performance serializerMap.putIfAbsent(clazz, ser) match { case null ⇒ @@ -161,7 +161,7 @@ class Serialization(val system: ExtendedActorSystem) extends Extension { */ private[akka] val bindings: Seq[ClassSerializer] = { val configuredBindings = for ((k: String, v: String) ← settings.SerializationBindings) yield { - val c = ReflectiveAccess.getClassFor(k, system.internalClassLoader).fold(throw _, (c: Class[_]) ⇒ c) + val c = ReflectiveAccess.getClassFor(k, system.internalClassLoader).fold(throw _, identity[Class[_]]) (c, serializers(v)) } sort(configuredBindings)