显示单词长度大于8的单词

时间:2019-10-04 08:57:38

标签: scala

我试图从下面的列表中获取单词,其中单词r和大小应大于8,并将列表中的所有值都转换为大写。

val names=List("sachinramesh","rahuldravid","viratkohli","mayank")

但是我在下面尝试过,但是它没有给出任何东西。抛出错误。

names.map(s =>s.toUpperCase.contains("r").size(8)

它抛出错误。 有人可以告诉我如何解决此问题。

关于, 库马尔

4 个答案:

答案 0 :(得分:3)

如果您要同时使用filtermap,请考虑使用collect方法,该方法一次调用即可完成。这是问题的处理方法:

names.collect{
  case s if s.lengthCompare(8) > 0 && s.contains('r') =>
    s.toUpperCase
}

collect的工作原理类似于filter,因为它仅返回与case语句匹配的值。它的工作原理类似于map,因为您可以在返回匹配值之前对其进行更改。

答案 1 :(得分:2)

您可以尝试以下方法:

 names.filter(str => str.contains('r') && str.length > 8) // str contains an `r` and length > 8
    .map(_.toUpperCase) // map the result to uppercase

答案 2 :(得分:2)

names.filter(...).map(...)方法解决了该问题,但是需要遍历列表两次。对于仅遍历该列表一次的最佳解决方案,请考虑@Tim关于collect的建议,或者考虑像这样的惰性Iterator方法:

names
  .iterator
  .filter(_.size > 8)
  .filter(_.contains('r'))
  .map(_.toUpperCase)
  .toList

答案 3 :(得分:0)

您也可以尝试以下方法:

val result =for (x <- names if x.contains('r') && x.length > 8) yield x.toUpperCase
result.foreach(println)

欢呼