Groovy集合类与迭代


集合类
// 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 }

你可能感兴趣的:(JavaScript,java,SQL Server,F#,groovy)