使用yield平坦化语法 - 提高代码可读性

时间:2016-09-25 00:49:56

标签: scala loops flatten

我正在努力提高代码的可读性,而且我很难用这个小块。

Foo是一种接受List [Ping]

的方法

Thing.generate返回List [Ping]

ListOfPings是一个List [Ping]

hasQuality从评估Ping

返回一个布尔值

以下是代码:

foo((for {
          pinger <- listOfPings
        } yield pinger.generate.filter(_.hasQuality)).flatten)

listOfPingss中的每个Ping都使用generate方法创建List [Thing],这意味着循环结束时yield的结果是List [List [Ping]]。

我正在压缩List [List [Ping]](不是单个列表),并将整个结果放入foo

我很难让这个看起来更漂亮,可能还有平面图?我真诚地感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

类似的东西:

foo {
  for (p <- listOfPings ; q <- p.generate if q.hasQuality) yield q
}