Булевы операторы в фильтре списка - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь отфильтровать список файлов по двум условиям.И следующий код работает

import java.io.File

val d = new File("/home/loom/shp")
val dirList = d.listFiles.filter(_.isDirectory).toList
dirList.map({
      _.listFiles.filter(f => f.isFile).filter(f => f.getName.endsWith("shp")).toList.map(println)

   // !! Inducde an error
   // _.listFiles.filter((f => f.isFile) && (f => f.getName.endsWith("shp"))).toList.map(println)
})

Однако, если я попытался объединить оба условия в одном условии фильтра (как показано в закомментированной строке), я получил следующее сообщение об ошибке:

Ошибка: (32, 27) отсутствует тип параметра _.listFiles.filter ((f => f.isFile) && (f => f.getName.endsWith ("shp"))). ToList.map(println)

Утверждает, что я пропустил тип параметра.Что я должен исправить, чтобы мой код работал?

1 Ответ

0 голосов
/ 29 января 2019

Вы пытаетесь использовать логический оператор && для двух функций, которые просто не будут работать.Вам нужна функция от File до Boolean, которую вы можете написать так:

_.listFiles.filter(f => f.isFile && f.getName.endsWith("shp")).toList.map(println)

f.isFile - логическое значение, а f.getName.endsWith(...) - логическое значение, поэтому && будетделай, что ожидаешь.

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