У меня есть простая файловая система абстракция:Как я могу использовать Stream для пересечения дерева в Scala?
trait PathItem { val label: String }
case class PathEnd(label: String, uri: String) extends PathItem
case class PathDirectory(
label: String = "",
contents: List[PathItem] = List.empty[PathItem]
) extends PathItem
С этой структурой можно построить до сколь угодно сложного дерева подкаталогов (PathDirectory) и файлов (PathEnd).
Как я мог бы использовать Scala Streams для извлечения списка «файлов» что-то вроде этого:
getFileStream(rootDir).foreach(f => println(f.uri))
getFileStream(rootDir).find(_.uri == "someTargetURI")
// where getFileStream creates a Stream[PathEnd] given a starting rootDir
Проходя через дерево, как это было бы круто, но я не понимая, как создать Поток для этого из скаладока.
(я знаю, что могу просто написать простую рекурсивную функцию, но я пытаюсь обращал внимания на потоки здесь.)
Вы можете в значительной степени лечить 'Stream' (или' Iterator') так же, как Вы были бы 'list', и последующие элементы будут вычислены лениво. EDIT: хороший учебник: http://alvinalexander.com/scala/how-to-use-stream-class-lazy-list-scala-cookbook – spiffman