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

groovy 字符串 数字 list map

发布时间:2020-12-14 16:55:08 所属栏目:大数据 来源:网络整理
导读:字符串: def str1 = 'hello' def str2 = "$str1 world"? //双引号中可以有表达式运算,输出hello world def str3 = /drnab/? // str3 =='drnab' def str4 = """ hello world hello grails """? //输出"nhellonworldnhellongrailsn" str

字符串:

def str1 = 'hello'

def str2 = "$str1 world"? //双引号中可以有表达式运算,输出hello world

def str3 = /drnab/? //str3 =='drnab'

def str4 = """

hello

world

hello

grails

"""? //输出"nhellonworldnhellongrailsn"

str1*2 == "hellohello"

str2-str1 == ' world'

str2[0..3]=='ell'

str2[-3..-1] == 'rld'

str1.toList() ==["h","e","l","o"]

str1.reverse() == "olleh"

str2.size == 20

数字:

def x = 3

def y =4

x+y == 7

x.plus(y) == 7

x instanceof Integer

def a = 2/3? //结果0.6666666667

a instanceof BigDecimal

a = 2.intdiv(3)

a instanceof Integer

def b =? a.setScale(3,BigDecimal.ROUND_HALF_UP)

b == 0.667

类:

class A{

String p1

String p2

}

def a = new A(p1:"XX",p2:"yy")

a.p1 == "XX"

a.p2 == "yy"



class A {

?String p1

}

class A {

private String p1

public String getP1(){p1}

public void setP1(String p1)( this.p1 = p1)

}

以上两个类完全等价。

并且groovy中,a.p1 == a.getP1()

a.p1 == "YY" a.setP1("YY")


a+b 实际上是调用了a的plus方法。

如果要求一个类可以相加,在类中添加此方法即可。


List

def list1 = [1,2,3]

list1 *2 == [1,3,1,3]

list1.unique() ==[1,3]

list1 = [1,3]

list1.unique() == (list1 as Set) as List

list1.size() == 6

list1.reverse() == [3,1]

[1,4] + [5] == [1,4,5]

[1,4] << [5] == [1,5]

[1,4] + 5 == [1,1] - [1] == [2,4]

[1,1] - 1 == [2,4]

[1,[4,5]].flatten() == [1,5]? //展开List中的List

[1,4].max() == 4

[1,4].min() == 1

[1,1].count(1) == 2

[1,4].sum() == 10

[1,4].sort() == [1,4].disjoint([...])? //一个List与另一个List是否存在交集,return boolean

[1,4].intersect([...])? //求一个List与另一个List的交集

List*.unique()? //对List中的每个元素都执行后面的方法

(1..9).each({ ?}) ?//遍历里面的所有元素

findAll({ it>4 }) ?//返回真的元素组成一个新的List

collect({ it*it }) ?//返回值构造成新的列表

any({ it*it == it+6 }) ?//用于判断集合是否有符合条件的元素。至少存在一个元素符合条件时,返回真,否则假

every({ it*it == it+6 })??//用于判断集合是否有符合条件的元素。当集合所有元素都符合条件时,返回真,否则假

Map:

def map =[key1:"vlaue1"]

map == ["key1":"value1"]

map.key1 == "value1"

map["key1"] == "value1"

map.keySet() == ["key1"]

def key = "key123"

def map1 = [key:"value"]

map1.key == 'value'

map1[key] == null


def map2 = [(key):"value"]

map2 == ["key123":"value"]

map1["newKey"] = "newValue"

map1 == ["key":"value","newKey":"newValue"]

map1.remove("key")

map1.key == null

[key1:"value1",key2:"value2"].each({ entry -> println "$entry.key $entry.value" }) ?//对Map的遍历

区间:

def range1 == 1..5

def range2 == 1..<5

range1.contains(5)

!range2.contains(5)

range1.size() == 5

range2.size() == 4

def today == new Date()

def yesterday = today - 1

(yesterday..today).size() == 2

('a'..'c').contains('b')

'b' in ('a'..'c')


//区间用于循环

def log = ' '

for (i in 1..5){

? log+=i

}

log == '12345'

//区间用于switch

def score = 36

switch(score){

case 0..60:

? ? println '不及格'

? ? break //注:break要换行写

case 60..<70:

? ? println '及格'

? ? break

case 70..<85:

? ? println '良好'

? ? break?

case 85..<100:

? ? println '优秀'

? ? break?

case 100:

? ? println '完美'

? ? break?

default:throw new IllegalArgumentException()

}

输出:不及格

[*range1] == [1,5]//前置*可将区间展开,用于构造List


闭包:

def c1 = {println it}//当没有->时,可用it的变量访问参数

def c2 = {text ->println text}

c1.call("XX") ?//用call方法调用闭包

c2("content2") ?//直接调用闭包


动态添加方法:

1、类名.metaClass.方法名 = 闭包

2、类名.metaClass.方法名 << 闭包

如果新加入的方法名与参数都和旧的完全一样,使用"="会覆盖旧的方法,使用“<<”会报错。

如果添加的方法带参数,闭包中要添加“输入参数”。

Foo.metaClass.speak = { def num -> ?//无指定类型的参数

}

Foo.metaClass.speak = { int num -> ?//强制类型的参数,如果传入的参数类型不对,会报错

}

Foo.metaClass.speak = { -> ?//强制无参数,如果传入参数,会报错

}


补充domain中的方法:beforeUpdate/Insert/Delete

(编辑:李大同)

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

    推荐文章
      热点阅读