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

Groovy入门(二)——集合类型-Range

发布时间:2020-12-14 16:44:33 所属栏目:大数据 来源:网络整理
导读:1. 范围 Ranges ranges用..表示范围操作符,用来指定左边界和右边界 ep: (0..10) - 01234567890 ..操作符指定了半排除范围,不包含右边界 ep:(0..10) - 0123456789 range也可以通过显示方法创建: def a = new IntRange( 0 , 10 ) Range主要方法 range主要有

1. 范围 Ranges


ranges用..表示范围操作符,用来指定左边界和右边界
ep: (0..10) -> 01234567890

..<操作符指定了半排除范围,不包含右边界
ep:(0..<10) -> 0123456789

range也可以通过显示方法创建:

def a = new IntRange(0,10)

Range主要方法

range主要有如下方法:

1.contains:是否包含一个元素。
assert (0..10).contains(5) == true assert(0..<10).contains(10) == false
2.size:集合大小
assert(0..<10).size() == 10
3.each迭代闭包
def str = ''
(9..5).each{element->
    str+=element
}
println(str)  -> "98765"
4. grep获取指定范围内的元素
assert [22,33,44,55,66].grep((21..50)) == [22,44]
5.在switch case语句中使用
age = 36
switch (age){
    case 10..26:
        rate =0.05;break
    case 27..36:
        rate = 0.06;break
    case 37..46:
        rate =0.07;break
    default:
        throw new IllegalArgumentException()
}
assert rate==0.06

Range实战

range可以用于任何类型,date类型或者String类型,只要这个类型满足以下两个条件:
1.该类型实现next和previous方法,也就是说,重写++和–操作符;
2.该类型实现java.lang.Comparable接口;也就是说实现compareTo方法,实际上是重写<=>操作符。

下面的例子中我们用类Weekday表示表示一周中的一天,一个Weekday有一个
值,这个值在‘sun’到‘sat’之间,本质上,它是0到6之间的一个索引,通过list的 下标来对应每个weekday的名称。

class Weekday implements Comparable{
     final static DAYS=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
    private int index=0
    Weekday(String day){
        index = DAYS.indexOf(day)
    }
    Weekday previous(){
        return new Weekday(DAYS[index-1]);
    }
    Weekday next(){
        return new Weekday(DAYS[(index+1)%DAYS.size()]);
    }

    @Override
    int compareTo(Object o) {
        return this.index <=> o.index
    }
    String toString(){
        return DAYS[index]
    }

}
def Monday = new Weekday('Mon')
def Friday = new Weekday('Fri')
def str = ''
for (day in Monday..Friday){
    str+= day.toString()+' '
}
println(str)

(编辑:李大同)

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

    推荐文章
      热点阅读