更好的斯卡拉风格

时间:2017-06-27 05:30:54

标签: python scala functional-programming user-defined-functions scala-collections

我是一名python / go编码器,是scala的新手。我有一个使用if和else的代码片段,但是有任何建议将它写成" scala"方式是什么?

if (sp.bin_an.size() > 0) {
  sp.bin_an.asScala.toList.foreach { an =>
  if (an.host != null && an.host.name != "" && an.routine == "xx") {
    service = an.host.name
  }
}

2 个答案:

答案 0 :(得分:0)

而不是list.foreach(x => if(cond) action)您可以执行过滤,然后像list.filter(cond).foreach(x => action)

那样进行预告

所以您的上述示例可以重写为

sp.bin_an.asScala.toList.filter(an => an.host != null && an.host.name != "" && an.routine == "xx").foreach()

答案 1 :(得分:0)

大多数情况下,只需执行mapforeach即可避免检查尺寸 - 如果收集为空,则不会发生任何事情。尽量避免像服务这样的变量。您最好将过滤结果分配给val

val service = sp.bin_an.asScala.toList.filter(an => an.host != null && an.host.name != "" && an.routine == "xx").map { an => an.host.name}

也许.toList转换是多余的。