首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala:如何创建一个循环/条件语句,允许您只获得要比较的同一个单词,然后再循环?

Scala:如何创建一个循环/条件语句,允许您只获得要比较的同一个单词,然后再循环?
EN

Stack Overflow用户
提问于 2022-03-05 20:50:03
回答 1查看 32关注 0票数 0

是否有一种方法来设置它,以便您可以创建一个循环/条件语句,允许您获得您要寻找的单词,并且只在那里循环?

例如,csv文件:姓名、年份、语言凯尔,1998年;英语凯尔,2011年;英语凯尔,1879年;法国乔治,1978年;西班牙语佐伊,2000年,英语

所以在寻找凯尔的时候,它只会得到凯尔的价值而不是其他的名字?

预期收益:凯尔,1998年;英格兰凯尔,2011年;英格兰凯尔,1879年;法语

抱歉,如果这很简单,但我对Scala还不太熟悉,也不太确定。

EN

回答 1

Stack Overflow用户

发布于 2022-03-05 22:45:52

步骤1:读取文件

代码语言:javascript
运行
复制
import scala.io.Source
import scala.util.Using

Using(Source.fromFile(filename)) { source =>
  val lines =
    source.getLines()
}

步骤2:处理每一行。

我们将将它们解析为case类实例,并删除所有损坏的字段:

代码语言:javascript
运行
复制
final case class Record(name: String, year: Int, language: String)
object Record {
  def parseLine(line: String): Option[Record] =
    line.split(',').toList match {
      case nameRaw :: yearRaw :: languageRaw :: Nil =>
        yearRaw.trim.toIntOption.map { year =>
           Record(
              name = nameRaw.trim,
              year = year,
              language = languageRaw.trim.toLowerCase
           )
        }

      case _ =>
        None
    }
}

val records =
  lines.flatMap(Record.parsLine)

步骤3:按所需谓词筛选记录:

代码语言:javascript
运行
复制
val namedKyle: Record => Boolean =
  record => record.name.toLowerCase == "kyle"

val validRecords =
  records.filter(namedKyle)

步骤4:在严格的集合中实现结果,如List

代码语言:javascript
运行
复制
val result =
  validRecords.toList

步骤5:将所有内容组合在一起:

代码语言:javascript
运行
复制
def readValidRecords(filename: String)(predicate: Record => Boolean): Try[List[Record]] =

Using(Source.fromFile(filename)) { source =>
  source
    .getLines()
    .flatMap(Record.parsLine)
    .filter(predicate)
    .toList
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71365858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档