集合类
// List String StringBuffer Range Map File Matcher统一使用size方法获取长度
def toys=[['a','01'],['b','02'],['c','03']]
assert toys instanceof ArrayList
println toys[1]
println toys.get(1)
println toys[1..<2]
toys[2] = ['3','03']
println toys[-1] // 倒数第一个
toys.putAt 1, ['2','02']
println toys[1]
toys<<['4','04'] // 追加元素
println toys[-1]
toys2 = toys + [4,5] // 连接元素
println toys2
def toy8 =[]
toy8 << '11'
toy8 << '22'
println toy8
toy8 << ['a','b']
println toy8
// 有些方法会修改原列表,有些方法不修改原列表
def list = [1,2,3,[4,5]]
println list.flatten(); //展开后返回新列表
println list.intersect([3,4,5]) //求交集
println list.pop();//删除列表最后元素
println list.reverse() //反转列表,返回新列表
println list.sort();
def list2 = [1,2,3,4,2]
println list2.count(2)
// Groovy 反射
def s = "hello"
println s
println s.class
["Java", "Groovy", "JavaScript"].each{println it}
s.class.methods.each{println it}
def map = [:]
assert map instanceof LinkedHashMap
assert map.size() == 0
map = [1:'toy1',2:'toy2']
assert map.containsKey(1)
assert map.containsValue('toy1')
println map
println map[2]
def map1 = ["java":"server", "groovy":"server", "javascript" : "web"]
// 从 map 获得键和值
map1.each { toy -> println toy.key + ':' + toy.value }
map1.each{
print it.key
println it.value
}
map1.each{k,v->
print k
println v
}
// 获得 map 值
print map1.java
//Groovy map.class 返回的是map中key为class 的元素 getClass才是返回类型
println ["Java", "Groovy", "JavaScript"].class
// java.util.ArrayList
def map2 = ["Java":"server", "Groovy":"server", "JavaScript":"web"]
println map.class
// null
map2.class = "I am a map element"
println map2.class
// I am a map element
println map2.getClass()
// class java.util.LinkedHashMap
def range = 1..<5
println range
println range.class
assert range instanceof List
range = 'a'..<'e'
println range
println range.class
range = 5..1
println range
println range.size();
println range.contains(2)
println range.getFrom();
println range.getTo()
println range.isReverse()
println range.subList(2,3)
for each迭代
// String迭代
def name = "xace"
name.each{
print it + " " //x a c e
}
//Range迭代
def range = 5..10
range.each{print it}
// Date 迭代
def today = new Date()
def nextWeek = today + 7
(today..nextWeek).each{
println it
}
// 枚举迭代
enum DAY{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
FRIDAY, SATURDAY, SUNDAY
}
DAY.each{
println it
}
(DAY.MONDAY..DAY.FRIDAY).each{
println it
}
//ResultSet 迭代
import groovy.sql.*
def sql = Sql.newInstance(
"jdbc:mysql://localhost:3306/test",
"root",
"root",
"com.mysql.jdbc.Driver"
)
sql.eachRow("select username from user_info"){row->
println row.username
}
sql.eachRow("select * from user_info"){
println("name : ${it.username}")
println("age : ${it.age}")
}
//文件迭代
def f = new File("D:\\新建文本文档.txt")
f.eachLine{con->
println "this file content is ${con} "
}
// 分解文件的每一行 拆成单词
def f = new File("D:\\新建文本文档.txt")
f.splitEachLine(" "){words->
words.each{ println it }
}
// 目录迭代 分离文件和目录
def dir = new File(".")
dir.eachFile{file->
if(file.isFile()){
println "FILE: ${file}"
}else if(file.isDirectory()){
println "DIR: ${file}"
}else{
println "Uh, I'm not sure what it is..."
}
}
// 三元操作符版
def f = new File(".")
f.eachFile{file->
println file.isFile() ? "file : ${file}" : "dir : ${file}"
}
// 如果只对目录有兴趣,那么可以使用 eachDir() 而不是 eachFile()。
// 还提供了 eachDirMatch() 和 eachDirRecurse() 方法。
// URL 迭代
def url = new URL("http://www.sina.com")
url.eachLine{line->
println line
}
"http://www.ibm.com".toURL().eachLine{ println it }