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

Groovy Tip 24 魔幻数组 四

发布时间:2020-12-14 16:58:48 所属栏目:大数据 来源:网络整理
导读:??????????????????????????????? Groovy Tip 24 魔幻数组 四 ? ? 数组还有一个重要内容就是要排序,排序是任何集合操作所躲不过去的。在 Java 语言中,在 Collections 接口中提供了“ sort ”方法来用于对 List 对象进行排序,可能我们在 Java 语言编程中已

??????????????????????????????? Groovy Tip 24 魔幻数组

?

?

数组还有一个重要内容就是要排序,排序是任何集合操作所躲不过去的。在Java语言中,在Collections接口中提供了“sort”方法来用于对List对象进行排序,可能我们在Java语言编程中已经用过无数次了,在这里限于篇幅就不多说了。

Groovy语言中,同样提供了“sort”方法,而且比Java语言的“sort”方法使用起来更加的方便。这就是我们这一个《魔幻数组》系列所要谈到的。

先来看一个简单的例子:

??? ?

??? ? def list1 = [1,5,7,3,9,4]

??? ?

??? ? println list1.sort()

?

?

结果为:

[1,3,4,5,7,9]

可以看到,Groovy语言的“sort”方法比Java语言的“sort”方法更加简单。上面的例子是对数字的排序,同样,如果数组元素是字符串的话,同样也可以使用“sort”方法来排序。请看下面的例子:

?

??? ? def list2 = ['a','h','c','i']

?

? println list2.sort()

?

?

结果为:

["a","c","h","i"]

?

看过了上面的例子,我们说,是的,我们使用“sort”方法对数组进行排序相当简单。但我们有更高的要求:我们想对list1对象按倒序排序,该怎么办呢?

??? ?

??? ? list1.sort{

?????? ? a,b ->

?????? ? ? b <=> a

??? ? }

???

??? ? println list1

?

?

?

可以看到,要进行倒序排序很简单,只要在两个元素进行比较的时候将ab改为ba就可以了。

上面的结果为:

[9,1]

?

当然了,对于数组的排序,我们还有一个基本的要求是能够对数组元素为GroovyBean对象进行排序。比如我们有如下的一个GroovyBean类:

?

class Empl

{

??? String id

??? String name

}

?

?

然后,我们有了如下的数组:

?

??? ? def list3 = [new Empl(id:5,name:'Tom'),new Empl(id:8,name:'Wallace'),

??? ?????????????? new Empl(id:4,name:'Mike'),new Empl(id:6,name:'Jack')]

?

?

现在,我们要对list3的元素按id的顺序排序。该怎么办呢?

?

??? ? list3.sort{

?????????? a,b ->

????????????? a.id <=> b.id

?????? }

?

???

?

很简单,我们还是使用闭包来对数组元素的排序方法进行定义。下面来测试上面的代码是否按我们的要求来排序了:

?

?????? list3.each{

?????????? println "${it.id} ${it.name}"

??? }

?

结果为:

4 Mike

5 Tom

6 Jack

8 Wallace

?

有些特殊的时候,我们希望对某一个已经排序好了的数组进行随机排序,那又该怎么办呢?

比如我们有如下的一个数组:

??????

?????? def list4 = [1,2,4,6]

??????

我们希望对list4的排序顺序打乱,而且要是随机的。

??????

?????? list4.sort{

?????????? Math.random()

?????? }

??????

??? println list4

?

结果为:

[3,1,2,6]

?

当然,既然是随机的,当你第二次运行上面的代码的时候,会得到不同的结果,如下所示:

[3,6,5]

(编辑:李大同)

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

    推荐文章
      热点阅读