首页 > 解决方案 > 列表过滤器中的布尔运算符

问题描述

我正在尝试按两个条件过滤文件列表。以下代码有效

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)

它声称我错过了参数类型。我应该更正什么才能使我的代码正常工作?

标签: scalacompiler-errors

解决方案


您正在尝试&&在两个函数上使用布尔运算符,这根本行不通。你想要的是一个 from Fileto的函数Boolean,你可以这样写:

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

f.isFile是一个布尔值并且f.getName.endsWith(...)是一个布尔值,所以&&会做你所期望的。


推荐阅读