Andere Spaß Variationen so können Sie die Leistung von Kotlin sehen:
Eine schnelle Version, indem Sie die Zeichenfolge zu schaffen alles auf einmal zu schreiben:
File("somefile.txt").writeText(history.entries.joinToString("\n") { "${it.key}, ${it.value}" })
// or just use the toString() method without transform:
File("somefile.txt").writeText(x.entries.joinToString("\n"))
oder vorausgesetzt, Sie tun könnten andere funktionelle Dinge wie Filterlinien oder nehmen Sie nur die erste 100 usw.Man könnte diesen Weg gehen:
File("somefile.txt").printWriter().use { out ->
history.map { "${it.key}, ${it.value}" }
.filter { ... }
.take(100)
.forEach { out.println(it) }
}
Oder ein Iterable
gegeben, damit sie in eine Datei schreiben unter Verwendung eines in einen String umwandeln, durch Erweiterungsfunktionen Erstellen von (ähnlich writeText()
Version oben, aber strömt den Inhalt statt eine große Reihe zuerst) materialisiert:
fun <T: Any> Iterable<T>.toFile(output: File, transform: (T)->String = {it.toString()}) {
output.bufferedWriter().use { out ->
this.map(transform).forEach { out.write(it); out.newLine() }
}
}
fun <T: Any> Iterable<T>.toFile(outputFilename: String, transform: (T)->String = {it.toString()}) {
this.toFile(File(outputFilename), transform)
}
wie jeder von diesen verwendet:
history.entries.toFile(File("somefile.txt")) { "${it.key}, ${it.value}" }
history.entries.toFile("somefile.txt") { "${it.key}, ${it.value}" }
oder Standard toString() für jedes Element:
history.entries.toFile(File("somefile.txt"))
history.entries.toFile("somefile.txt")
oder ein File
gegeben, damit sie von einem Iterable
, indem diese Erweiterung Füllfunktion:
fun <T: Any> File.fillWith(things: Iterable<T>, transform: (T)->String = {it.toString()}) {
this.bufferedWriter().use { out ->
things.map(transform).forEach { out.write(it); out.newLine() }
}
}
mit Verwendung von:
File("somefile.txt").fillWith(history.entries) { "${it.key}, ${it.value}" }
oder Standard toString() für jedes Element:
File("somefile.txt").fillWith(history.entries)
, die, wenn Sie die anderen toFile
Erweiterung bereits hatte, konnte man umschreiben eine Nebenstelle anrufen, die die anderen:
fun <T: Any> File.fillWith(things: Iterable<T>, transform: (T)->String = {it.toString()}) {
things.toFile(this, transform)
}
ich habe mehr Variationen in einer neuen Antwort für Spaß, Ihnen mehr Ideen der Dinge zu geben, die Sie tun können. –