2016-12-23 3 views
0

Я хочу проверить, что каждая строка в файле, кроме первой строки заголовка, содержит строку «14022015». Я хотел бы сделать это так, как Scala, и я придумал что-то умное (я думал), используя foldLeft:Tail on scala iterator

assert(Source.fromFile(new File(s"$outputDir${File.separator}priv.txt")) 
    .getLines().foldLeft(true)((bool, line) => (bool && line.contains("14022015")))) 

Пока я не узнал о строке заголовка, который должен быть исключен из теста. хвост не будет работать, поскольку getLines возвращает Iterator, а не List. Есть ли что-то еще, что я могу сделать (Scala wise)?

ответ

2

iterator.drop(1) поможет вам достичь именно то, что вам нужно

UPD: Примечание стороны, рассмотреть вопрос об использовании рекурсивного решения вместо fold в данном случае - fold всегда будет сканировать весь итератор, и на основе кода выглядит как вы можете его короткое замыкание, так же, как стандартный a && b && c не собираюсь вычислять выражения вниз по списку, как только он встречает false

6

просто:

val res: Boolean = myFile.getLines.drop(1).forall(_.contains("14022015")) 
Смежные вопросы