遍历数组的最佳方式是什么

遍历数组是我们经常遇到的,
你可能会想到

1
for (i <- Array(1,2,3)) println(i)

但是,如果我们把元素转换为新的集合,应该使用for/yield或者map

1
2
3
4
5
6
7
8
//for yield
for (i <- Array(1, 2, 3)) yield i*2
// output: Array[int] = Array(2, 4, 6)

// map

Array(1,2,3).map(_ * 2)
// output: Array[Int] = Array(2, 4, 6)

当我们真正了解了集合类后,我们再也不会用for循环。
开始使用集合类中filter, foreach和map等方法,这样看起来更加简洁和简单。

对比一下scala和Java代码

1
2
3
//scala 代码
val nums = List(1, 2, 3, 4, 5).filter(_ < 4)
//output nums:List[Int] = List(1, 2, 3)

实现同一功能的Java代码

1
2
3
4
5
6
Integer[] intArray = {1, 2, 3, 4, 5};
List<Integer> nums = Array.asList(intArray);
List<Integer> filteredNums = new LinkedList<Integer>();
for (int n: nums) {
if (n < 4) filteredNums.add(n);
}

我们就可以看出来Scala和Java在处理数据方面的差异。
如果你还不信的话,可以再看一个例子,体会scala的神奇之处。

1
2
3
//filter the items, then double them
val nums = List(1,2,3, 4, 5).filter(_ < 4).map(_ * 2)
//output nums: List[Int] = List(2, 4, 6)

你可以自己实现对应的Java代码。对比一下。

Sumer Zhang wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客。