过滤器、地图、flatMap的基本知识

104 阅读2分钟

Scala有一个非常大的集合。集合就像容纳一些线性数值集合的容器,我们应用一些操作,如filter、map、flatMap和用于理解的集合,并在一个新的集合中操作它们。

筛选

选择集合中满足一个谓词的所有元素。

def filter(p:A=>boolean):List[A] 
  • 参数:p- 用于测试元素
  • 返回。一个新的集合,由这个集合中满足给定谓词p的所有元素组成,元素的顺序被保留下来。

例子

val numList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

val evenNumList = numList.filter(n => n % 2 == 0)

print(evenNumList)

输出

List(2, 4, 6, 8, 10)

地图

通过对集合中的所有元素应用一个函数来建立一个新的集合。

def map(f: A => B): List[B]
  • 参数:f-函数应用于每个元素。
  • 类型参数。B-返回集合的元素类型。
  • 返回:将给定的函数f应用于集合中的每个元素而得到的新集合,以及结果的集合。

例子

val list = List(1,2,3,4)

val AddOneInEachElement = list.map(n=>n+1)

print(AddOneInEachElement)

输出

List(2, 3, 4, 5)

flatMap

通过对集合中的所有元素应用一个函数建立一个新的集合,并使用结果集合中的元素。

def flatMap(f: A => IterableOnce[B]): List[B]
  • 参数:f-要应用到每个元素的函数。
  • 类型参数。B- 返回集合中的元素类型。
  • 返回。一个新的集合,该集合由给定的集合值函数f应用于集合中的每个元素,并将结果串联起来。

例子

val num = List(1, 2)

val char = List('a', 'b')

println(num.flatMap(x => char.map(y => s"$x$y")))

输出

List(1a, 1b, 2a, 2b)

对于理解力

Comprehension是Scala中的一个构造,它允许我们评估某些表达式。For Comprehension的形式是for (enumerators) yield e,其中enumerators是指一个分号分隔的枚举器列表。

枚举器可以是一个迭代列表的生成器,也可以是一个过滤器。Comprehension为枚举器生成的每个结果评估主体e,并返回这些值的列表。

例子

val num = List(1, 2)

val char = List('a', 'b')

val combination = for{

    n<-num

    c<-char

  }yield s"$n$c"
  
print(combination)

输出

List(1a, 1b, 2a, 2b)

总结

通过这篇文章,你将获得关于过滤器、地图、理解和flatMap的基本知识,它也为我们提供了更简洁和可读的代码。