概述
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,33,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)
最后
以上就是慈祥人生为你收集整理的groovy之范围特性的全部内容,希望文章能够帮你解决groovy之范围特性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复