从包含actor引用的可迭代对象中选择特定项

时间:2014-05-04 20:48:50

标签: scala akka actor

假设actorRefList是一个可迭代对象,它包含5个元素。每个元素下面的注释行是它的类类型(不包含在iterable中。)

Actor[akka.tcp:/ /ServerSystem@127.0.0.1:5555/user/ServerActor#318394851]
//class akka.remote.RemoteActorRef

Actor[akka.tcp:/ /Server2System@127.0.0.1:5556/user/Server2Actor#1747632436]
//class akka.remote.RemoteActorRef

Actor[akka:/ /ClientSystem/user/ClientActor/$a#393644788]
//class akka.actor.LocalActorRef

Actor[akka:/ /ClientSystem/user/ClientActor/$b#1517923571]
//class akka.actor.LocalActorRef

Actor[akka:/ /ClientSystem/user/ClientActor/$c#-1004799764]
//class akka.actor.LocalActorRef

我想循环遍历此iterable并选择第一个RemoteActorRef,以便我可以将其指定为我的本地actor向其发送消息的远程actor。我正在考虑for循环,但我并不完全知道如何识别第一个RemoteActorRef元素。如何根据类类别区分元素?任何帮助表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:2)

即使有可能,我也会远离检查班级类型。如果您知道本地演员系统的地址,那么您可以将该比较与ActorRef中的Iterable进行比较。如果你没有一个已知的本地演员参考,你可以像这样创建一个虚拟路径:

val localPath = system / "foo"

然后,一旦您拥有一个已知的本地ActorPath,您就可以find拨打Iterable这样的号码来使用它:

val remoteRef = refs.find(_.path.address != localPath.address)

答案 1 :(得分:0)

您可以使用obj.isInstanceOf[Class]操作测试对象类。

因此,在您的情况下,它将类似于:

actorRefList.find{ _.isInstanceOf[RemoteActorRef] }
相关问题