Метод Scala, который возвращает несколько объединенных функций фильтра

В моем приложении я m фильтрование массива файлов по различным типам, например, следующим:

val files:Array[File] = recursiveListFiles(file)
  .filter(!_.toString.endsWith("png"))
  .filter(!_.toString.endsWith("gif"))
  .filter(!_.toString.endsWith("jpg"))
  .filter(!_.toString.endsWith("jpeg"))
  .filter(!_.toString.endsWith("bmp"))
  .filter(!_.toString.endsWith("db"))

Но было бы более разумно определить метод, который принимает массив String и возвращает все эти фильтры в виде сцепленной функции. Это возможно? Так что я могу написать

val files:Array[File] = recursiveListFiles(file).filter(
  notEndsWith("png", "gif", "jpg", "jpeg", "bmp", "db") 
)
8
задан Ingo Fischer 5 August 2010 в 10:35
поделиться

2 ответа

Вы можете сделать что-то вроде этого:

def notEndsWith(suffix: String*): File => Boolean = { file =>
  !suffix.exists(file.getName.endsWith)
}
10
ответ дан 5 December 2019 в 15:17
поделиться

Один из способов может быть примерно таким:

def notEndsWith(files:Array[File], exts:String*) = 
  for(file <- files; if !exts.exists(file.toString.endsWith(_))) yield file

Что можно назвать так:

val files = Array(new File("a.png"),new File("a.txt"),new File("a.jpg"))
val filtered = notEndsWith(files, "png", "jpg").toList
1
ответ дан 5 December 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: