Искать папку с определенным именем в Scala - PullRequest
2 голосов
/ 02 мая 2019

Есть много папок, содержащих ежедневные артефакты сборки.Мне нужно получить самую новую папку, чтобы проверить некоторые детали внутри.Название сгиба имеет следующий стиль:

xx.172-3 

xx является стабильным числом и может быть проигнорировано.172 является 172-й постройкой в ​​хронологическом порядке.3 - третья версия 172. Длина имени папки не соответствует.Может быть 34.99-0 до 34.120-11

Типичные папки, например, в пути / test ,

   /test |-/34.170-0/ 
         |-/34.171-0/  
         |-/34.171-1/ 
         |-/34.172-0/
         |-/34.171-1/ 
         |-/34.171-2/
         |-/34.171-3/

Вопрос:

Как найти папку последней сборки / 34.171-3 с помощью Scala?

Примечание:

IЯ думал об использовании метки времени, и она не работает.Потому что предыдущая папка свободна для доступа после сборки.Отметка времени не указывает, является ли это новейшей сборкой

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Вы можете использовать шаблон Regex, чтобы убедиться, что имя каталога безопасно для сравнения.

val dirPattern = raw"\d+.(\d+)-(\d+)".r

listOfDirNames.maxBy{
  dirPattern.unapplySeq(_)
            .collect{case List(a,b) => (a.toInt,b.toInt)}
            .getOrElse((0,0))
}
1 голос
/ 02 мая 2019

Вы можете определить метод, который разберет ваши имена файлов в кортеж из 3 чисел:

import scala.util.Try

def parse(s: String) = s.split("[.-]") match { //simple one case thanks to jwvh ;)
   case Array(_, a, b) => Try(a.toInt, b.toInt).toOption //in case there's folder like 34.xxx-0
   case _ => None
}

И затем просто используйте его, чтобы найти последний файл:

 val lastFile = new File("/test")
    .listFiles(_.isDirectory)
    .maxBy(f => parse(f.getName))

В Scala 2.13 вы также можете сделать:

def parse(s: String) = s match {
   case s"${_}.$a-$b" => Try(a.toInt, b.toInt).toOption
   case _ => None
}

, что, возможно, еще более читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...