1、排序
scala> val lst = List(2,3,1,5,7,6,4,9,8)
lst: List[Int] = List(2, 3, 1, 5, 7, 6, 4, 9, 8)
scala> val lst2 = lst.sorted
lst2: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> lst
res0: List[Int] = List(2, 3, 1, 5, 7, 6, 4, 9, 8)
scala> lst2
res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
2、分组2、分组
scala> val lst3 = lst2.grouped(5)
lst3: Iterator[List[Int]] = non-empty iterator
scala> lst3
res2: Iterator[List[Int]] = non-empty iterator
//将Iterator转为List
scala> val lst4 = lst3.toList
lst4: List[List[Int]] = List(List(1, 2, 3, 4, 5), List(6, 7, 8, 9))
scala> lst4
res3: List[List[Int]] = List(List(1, 2, 3, 4, 5), List(6, 7, 8, 9))
3、平铺
flattern
scala> val lst5 = lst4.flatten
lst5: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> lst5
res4: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
介绍几个日常工作必备的 Scala 集合函数,如转换函数和聚合函数。
1 最大值和最小值
我们先从动作函数开始。
在序列中查找最大或最小值是一个极常见的需求,较常用于面试问题和算法。还记得 Java 中的代码行吗?如下:
int[] arr = {11, 2, 5, 1, 6, 3, 9};
int to = arr.length - 1;
int max = arr[0];
for (int i = 0; i < to; i++) {
if (max < arr[i+1])
max = arr[i+1];
}
System.out.println(max);
问题:怎么在 List 中找到最大/最小值呢?
Scala 推荐了一个很赞的解决方案:
val numbers = Seq(11, 2, 5, 1, 6, 3, 9)
numbers.max //11
numbers.min //1
但实际操作的数据更加复杂。下面我们介绍一个更高级的例子,其中包含一个书的序列。
case class Book(title: String, pages: Int)
val books = Seq( Book("Future of Scala developers", 85),
Book("Parallel algorithms", 240),
Book("Object Oriented Programming", 130),
Book("Mobile Development", 495) )
//Book(Mobile Development,495)
books.maxBy(book => book.pages)
//Book(Future of Scala developers,85)
books.minBy(book => book.pages)
如上所示,minBy & maxBy 方法解决了复杂数据的问题。你只需选择决定数据最大或最小的属性。
#2 过滤
你过滤过集合吗?比如,筛选价格大于10美元的条目,或挑选年龄在24岁以下员工等,所有这些操作属于过滤。
让我们举例说明:过滤一个数字 List,只获取奇数的元素。
val numbers = Seq(1,2,3,4,5,6,7,8,9,10)
numbers.filter(n => n % 2 == 0)
然后加大难度,我想获取页数大于120页的书。
val books &#