Lists
你能使用下面的方法创建一个lists,注意[]是一个空list。
1 |
def list = [ 5 , 6 , 7 , 8 ] |
2 |
assert list. get ( 2 ) == 7 |
4 |
assert list instanceof java.util.List |
7 |
assert emptyList. size () == 0 |
9 |
assert emptyList. size () == 1 |
每个列表表达式都是创建了 java.util.List的一个实例。
Ranges
Ranges容许你创建一个值序列,这个只序列可以被用作Lists,因为Range继承自Java.util.List.
Ranges 使用 ..来定义,并且包含两端的值
Ranges 也可以使用 ..< 来定义半开闭序列,这样创建的序列将包含最左边的,但是不包含最右边的:
3 |
assert range. size () == 4 |
4 |
assert range. get ( 2 ) == 7 |
6 |
assert range instanceof java.util.List |
7 |
assert range. contains ( 5 ) |
8 |
assert range. contains ( 8 ) |
10 |
// lets use a half-open range |
12 |
assert range. size () == 3 |
13 |
assert range. get ( 2 ) == 7 |
15 |
assert range instanceof java.util.List |
16 |
assert range. contains ( 5 ) |
17 |
assert ! range. contains ( 8 ) |
19 |
//get the end points of the range without using indexes |
21 |
assert range.from == 1 |
Ranges适用于任何的实现了 java.lang.Comparable接口的Java对象,而且他也有next()和 previous() 方法来访问下一个和上一个元素。
比如你可以在Ranges中是用String:
3 |
assert range. size () == 4 |
4 |
assert range. get ( 2 ) == 'c' |
6 |
assert range instanceof java.util.List |
7 |
assert range. contains ( 'a' ) |
8 |
assert range. contains ( 'd' ) |
9 |
assert ! range. contains ( 'e' ) |
Ranges可以和for循环结合起来说使用:
使用下面的代码也可以达到上述的效果:
Ranges当然也可以用在switch中:
2 |
case 1 .. 10 : interestRate = 0.076 ; break ; |
3 |
case 11 .. 25 : interestRate = 0.052 ; break ; |
4 |
default : interestRate = 0.037 ; |
Maps
注意 [:] 其实是一个空的Map。
Map的key如果是string的话,默认是这种形式: [a:1],它等价于["a":1]. 但是如果你真的想让一个变量作为key的话,那么你必须使用括号将他包起来: [(a):1].
1 |
def map = [name: "Gromit" , likes: "cheese" , id: 1234 ] |
2 |
assert map. get ( "name" ) == "Gromit" |
3 |
assert map. get ( "id" ) == 1234 |
4 |
assert map[ "name" ] == "Gromit" |
5 |
assert map[ 'id' ] == 1234 |
6 |
assert map instanceof java.util.Map |
9 |
assert emptyMap. size () == 0 |
10 |
emptyMap.put( "foo" , 5 ) |
11 |
assert emptyMap. size () == 1 |
12 |
assert emptyMap. get ( "foo" ) == 5 |
Maps也有点想beans,这样就可以使用.号来获取属性:
1 |
def map = [name: "Gromit" , likes: "cheese" , id: 1234 ] |
2 |
assert map.name == "Gromit" |
6 |
assert emptyMap. size () == 0 |
8 |
assert emptyMap. size () == 1 |
9 |
assert emptyMap.foo == 5 |
更有效的使用’*.’操作符
我们可以使用这个操作符来操作集合中的所有元素:
1 |
assert [ 1 , 3 , 5 ] == [ 'a' , 'few' , 'words' ]*. size () |
增强的集合方法:
比如下面的例子:
1 |
def words = [ 'ant' , 'buffalo' , 'cat' , 'dinosaur' ] |
2 |
assert words. findAll { w -> w. size () > 4 } == [ 'buffalo' , 'dinosaur' ] |
下面的这个例子获取了所有元素的首字母:
1 |
def words = [ 'ant' , 'buffalo' , 'cat' , 'dinosaur' ] |
2 |
assert words. collect { it[ 0 ] } == [ 'a' , 'b' , 'c' , 'd' ] |
切片操作符
1 |
def text = "nice cheese gromit!" |
5 |
assert x. class == String |
10 |
def map = [name: "Gromit" , likes: "cheese" , id: 1234 ] |
12 |
assert map[ "name" ] == "Gromit" |
13 |
assert map.name == "Gromit" |
15 |
def list = [ 10 , 11 , 12 ] |
下面再给出一些例子:
2 |
def sub = list[ 1 , 3 , 20 .. 25 , 33 ] |
3 |
assert sub == [ 101 , 103 , 120 , 121 , 122 , 123 , 124 , 125 , 133 ] |
也可以使用切片操作符来更新元素
1 |
def list = [ "a" , "b" , "c" ] |
5 |
assert list == [ "b" , "b" , "d" , 5 ] |
我们可以使用负数来从尾部获取 List, array, String 等的值:
1 |
def text = "nice cheese gromit!" |
5 |
def name = text[- 7 ..- 2 ] |
6 |
assert name == "gromit" |
如果你使用一个向后的索引,也就是说前面的值比后面的大,比如[3:1],那么得到的结果是相反的:
1 |
def text = "nice cheese gromit!" |
Dynamic objects (Expandos)
Expando 在严格意义上来说并不是一个集合。但是有点类似于Map, .他容许你充分理由Groovy’s closure mechanisms来创建动态对象, 但是 Expando和Map不同的是他可以提供 synthetic methods 。
1 |
def player = new Expando() |
3 |
player.greeting = { "Hello, my name is $name" } |
5 |
println player.greeting() |
7 |
println player.greeting() |
The player.greeting assignment passes in a closure to execute when greeting() is called on the Expando. Notice that the closure has access to the properties assigned to the Expando, even though these values may change over time, using Groovy’s GString ”$variableOrProperty” notation.
- groovy集合
groovy集合可以直接在语言中使用,因为它默认已经导入包了. 不需要初始化对象,也不需要专门的类. 集合是groovy语言本地成员.Groovy语法提供了本地列表和相应的映射. 每个Groovy集合 ...
- Groovy系列(4)- Groovy集合操作
Groovy集合操作 Lists List 字面值 您可以按如下所示创建列表. 请注意,[]是空列表表达式 def list = [5, 6, 7, 8] assert list.get(2) == ...
- 新学习的语言Groovy
什么是 Groovy? Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...
- 学点Groovy来理解build.gradle代码
在写这篇博客时,搜索参考了很多资料,网上对于 Groovy 介绍的博客已经特别多了,所以也就没准备再详细的去介绍 Groovy,本来也就计划写一些自己认为较重要的点.后来发现了 Groovy 的官方文 ...
- [转载] 详述三种现代JVM语言--Groovy,Scala和Clojure
转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的 ...
- android build.gradle(groovy)
一.build.Gradle 这个 build.Gradle 文件来自 drakeet 大神的 Meizi 项目我直接在代码上加注释,参照着注释看代码就行,是不是发现有很多代码平时都没看见过. //M ...
- rest-assured之静态导入及简单使用实例
一.静态导入 为了有效的使用rest-assured,官网推荐从下列class中静态导入方法: io.restassured.RestAssured.* io.restassured.matcher. ...
- 接口测试 rest-assured 使用指南
转自:https://testerhome.com/topics/7060 原文:https://github.com/rest-assured/rest-assured/wiki/Usage本文gi ...
- rest-assured-doc接口自动化测试,数据驱动测试平台
原文:https://github.com/rest-assured/rest-assured/wiki/Usage 本文github地址:https://github.com/RookieTeste ...
- Groovy 读取json文件,并用gson反序列化为List集合
Groovy 读取json文件,并用gson反序列化 package com.bicycle.util import bicycle_grails.StationInfo import com.goo ...
随机推荐
- Android SQLite (四 ) 全面详解(二)
SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ...
- javascript之享元模式
实现享元模式的一般步骤: 1.将所有外在数据从目标类中剥离.具体做法是尽可能多的删除该类的属性,所删除的应该是那种因实例而异的属性.构造函数的参数也要这样处理,这些参数应该被添加到该类的各个方法. 这 ...
- C# 无边框窗体边框阴影效果
通过下面代码在构造函数中调用方法 SetShadow(); 即可实现无边框窗体的阴影效果了 需要添加命名空间 using System.Runtime.InteropServices; private ...
- 模拟alert和confirm
啥也不说,先上图,有图有真相 :) 现在绝大多数网站都不用自带的alert和confirm了,因为界面太生硬了.因此这个插件就这样产生了... 来看插件的实现代码吧: (function () { $ ...
- [C#]動態叫用Web Service
http://www.dotblogs.com.tw/jimmyyu/archive/2009/04/22/8139.aspx 摘要 Web Service對大家來說想必都不陌生,也大都了解Web S ...
- CentOS 6.5系统安装配置图解教程
说明: 截止目前CentOS 6.x最新版本为CentOS 6.5,下面介绍CentOS 6.5的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 6.5 64位 IP地址:192.16 ...
- Eclipse系列:如何断点调试web项目
一直不知道如何在Eclipse中断点调试跟踪问题,今天试了一把,大致的步骤如下: 1)事先在需要断点跟踪的代码行左侧空白处双击处设置断点: 2)在工程列表中选中要调试的工程,然后点击Debug on ...
- 从0开始学Java——JSP&Servlet——如何在Eclipse中配置Web容器为tomcat
windows- >Preferences -> Server->runtime Envirement ->Add 点击下一步,然后按照如下设置:
- Opencv step by step - 视频进度条
上一个博文只是进行了视频播放,这里加上进度条. 下面是修改好的代码: #include <cv.h> #include <highgui.h> /* * tan@ubuntu: ...
- openMP的一点使用经验【非原创】
按照百科上说的,针对于openmp的编程,最简单的就是在开头加个#include<omp.h>,然后在后面的for上加一行#pragma omp parallel for即可,下面的是较为 ...