在 Scala 中以适当的功能方式在 Java 中执行以下代码的最佳方法是什么?
LinkedList<Item> itemsInRange = new LinkedList<Item>();
for (int y = 0; y < height(); y++) {
for (int x = 0; x < width(); x++) {
Item it = myMap.getItemAt(cy + y, cx + x);
if (it != null)
itemsInRange.add(it);
}
}
// iterate over itemsInRange later
当然,它可以以命令式的方式直接翻译成 Scala:
val itemsInRange = new ListBuffer[Item]
for (y <- 0 until height) {
for (x <- 0 until width) {
val it = tileMap.getItemAt(cy + x, cx + x)
if (!it.isEmpty)
itemsInRange.append(it.get)
}
}
但我想以适当的、实用的方式来做。
我认为应该map
在某种二维范围内进行操作。理想情况下,map
将执行一个函数,该函数将获取x
和y
作为输入参数和输出Option[Item]
。在那之后,我会得到类似的东西Iterable[Option[Item]]
,然后flatten
它会 yield Iterable[Item]
。如果我是对的,那么唯一缺少的就是以某种方式在 2D 范围内进行地图操作。