以下代码创建临时Vector:
@Test
public void fileUpload_Success() {
String fullPath = "C:\\test\\myFile.txt";
//Your call here to upload the file.
org.w3c.dom.Document myFile = buildTestFile();
ExportFileToDisk exportComponent = new ExportFileToDisk();
exportComponent.exportXMLFile(myFile, fullPath);
File f = new File(fullPath);
boolean fileExists = (f.exists() && !f.isDirectory());
assertTrue(fileExists);
}
以下代码创建一个临时数组:
0.to(15).map(f).toArray
^^^^^^^^
Sequence
^^^^^^^^^^^^^^^
temp Vector
^^^^^^^^^^^^^^^^^^^^^^^
Array
有没有办法在序列上映射f并直接获取数组,而不会产生临时的?
答案 0 :(得分:5)
您可以使用breakOut
:
val res: Array[Int] = 0.to(15).map(f)(scala.collection.breakOut)
或
0.to(15).map[Int, Array[Int]](f)(scala.collection.breakOut)
或使用view
:
0.to(15).view.map(f).to[Array]
有关观看次数的详情,请参阅this document。
答案 1 :(得分:1)
(0 to 15).iterator.map(f).toArray
答案 2 :(得分:1)
如果您要掌握如何构建初始Range
的方法,则可以使用Array
Array.range(start, end)
中的companion object来直接创建Range
作为Array
而没有强制转换:
Array.range(0, 15) // Array[Int] = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
可以这样从Array
映射到Array
:
Array.range(0, 15).map(f) // Array[Int] = Array(0, 2, 4, 6, 8, 10, 12, 14, ...)
注意:Array.range(i, j)
等同于i until j
(i to j+1
)而不是i to j
。
使用Array.tabulate
,甚至更短,一次通过,但可读性较低:
Array.tabulate(15)(f) // Array[Int] = Array(0, 2, 4, 6, 8, 10, 12, 14, ...)