scala - 列表过滤器中的布尔运算符
问题描述
我正在尝试按两个条件过滤文件列表。以下代码有效
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)
它声称我错过了参数类型。我应该更正什么才能使我的代码正常工作?
解决方案
您正在尝试&&
在两个函数上使用布尔运算符,这根本行不通。你想要的是一个 from File
to的函数Boolean
,你可以这样写:
_.listFiles.filter(f => f.isFile && f.getName.endsWith("shp")).toList.map(println)
f.isFile
是一个布尔值并且f.getName.endsWith(...)
是一个布尔值,所以&&
会做你所期望的。
推荐阅读
- teradata - 通过 querygrid 从 hive 中获取列名
- swagger - 使用 minItems 和 maxLength 为项目生成 Swagger 代码
- scala - http4s - 如何创建线程数有限的 blaze 客户端?
- javascript - 如果我在 package.json 中设置“类型:模块”,Cordova 构建会失败。我该如何解决这个问题,但仍然进行单元测试?
- java - Ehcache 2 到 Ehcache 3 迁移
- vue.js - Vue 动态表单值和键,具有预先存在的渲染值,为什么不渲染?
- javascript - 跟踪 SpeechSynthesis API 所说的单词
- laravel - 在 MongoDB(Laravel)中的地理位置附近没有收到所有评论
- spring-boot - 使用 Spring Batch 和 Spring Boot 将数据从一个 Db 迁移到另一个 Db
- swiftui - SwiftUI 在搜索结果中突出显示单词