加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy Tip 26 魔幻数组 六

发布时间:2020-12-14 16:58:39 所属栏目:大数据 来源:网络整理
导读:???????????????????????????? Groovy Tip 26 魔幻数组 六 ? ? List 还有一些统计学上面的运算,也是我们可能要经常用到的。比如,将集合里的元素求和、求集合里的最大、最小元素等等。 ? 比如我们有如下的一个集合对象: ??? ? ??? ? def list = [ 1 , 3 ,

???????????????????????????? Groovy Tip 26 魔幻数组

?

?

List还有一些统计学上面的运算,也是我们可能要经常用到的。比如,将集合里的元素求和、求集合里的最大、最小元素等等。

?

比如我们有如下的一个集合对象:

??? ?

??? ? def list = [1,3,4,5,6]

?

?

有些时候,我们希望把list里所有元素相加起来,这时候,Groovy语言为我们提供了“sum”方法,示例代码如下:

??? ?

??? ? println list.sum()

?

结果为:

19

?

当然了,“sum”方法要提供的功能不止是简单的求和,而且还可以做更为复杂的求和。比如,我们有如下要求:先把集合里为偶数的元素除以2,再求和。那么代码就是如下的样子:

??? ?

??? ? println list.sum{

?????? ? it%2==0?it/2:it

??? ? }

?

?

结果为:

14

?

求取集合的最大、最小元素的方法是“max”和“min”方法,还是以上面的list对象为例子。

??? ?

??? ? println list.max()

??? ?

??? ? println list.min()

?

?

运行结果为:

6

1

?

?

同样的,方法“max”和“min”也不是简单意见上的求取最大、最小元素,当他们以闭包作为输入参数以后,就可以做很多广义上的求最大、最小元素了。

比如,我们现在希望把上面的list的每一个元素求负以后再找出最大的元素:

??????

??? ? println list.max{

?????? it = 0-it

??? }

?

?

结果为:

1

?

当然了,上面的例子可能没有太大的实际意义。下面,我们来看一个有一点点实际意义的例子。比如我们有如下的一个集合对象:

?

??? ? def list1 = ['hello','wallace','world','armstrong']

?

我们希望找出字符串长度最大的那个元素:

??? ?

??? ? println list1.max{

?????? ? it.size()

??? ? }

?

?

结果为:

armstrong

?

最后,还有一个集合类的运算方法需要提出来,这个方法比较难以理解一些,所以把它放在最后,作为我们整个《魔幻数组》系列的结尾。这个方法就是“inject”方法。首先,我们还是来看一个简单的例子:

def list2 = [1,7]

?

??? ? println list2.inject(0){

?????????? count,it ->

????????????? count+it

??? }

?

这个方法很不好理解,它的意思是输入一个值,如上面的“0”到一个循环的第一次循环中去,如上例中,将“0”传给“count”变量,然后将运算的结果,如“count+it”的结果传递给第二次循环,即传递给第二次循环的“count”变量,然后再运算“count+it”,再把结果传递给第三次循环,依此类推。

上面代码的结果为:

17

?

上面的代码等同于下面的代码:

?

?????? int count = 0

?????? list2.each{

?????????? count += it

?????? }

??????

?????? println count

?

?

可以看到,上面的代码就比“inject”方法好理解多了,而且代码量也没有增加多少,可以预见,我们在Groovy语言的使用过程中会很少使用到该方法。但是,我们仍然要学会这个方法,先不说在某些特殊情况下,这个方法会很好用。最要的是,当我们在阅读一些开源代码的时候,遇到这个方法不会迷惑。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读