`

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 }
分享到:
评论

相关推荐

    groovy in action 中文版 2017.11

    在实际使用中,Groovy的集合类型和闭包都会有一些需要注意的地方,例如并发修改和副本与修改的语义区别。Groovy的设计模式支持也为开发者提供了实现常见设计模式的便利。例如,Groovy可以很自然地实现Visitor模式和...

    groovy-api-chm

    2. **类与对象**:Groovy中的类与Java类似,但更易用。它支持单例、抽象类、接口以及构造器。Groovy类默认是public,并且可以不写public关键字。Groovy对象可以通过`new`关键字创建,也可以通过`invokeConstructor`...

    groovy+in+action

    - **循环语句**:Groovy支持while、for等循环语句,并引入了更简洁的迭代方式,如each方法。 - **异常处理**:Groovy继承了Java的异常处理机制,同时也提供了更加简洁的语法。 **3. 集合类型** - **列表(List)*...

    groovy-all-1.8.1.jar.zip

    总之,"groovy-all-1.8.1.jar.zip"是Groovy 1.8.1版本的集合库,包含了执行Groovy代码所需的一切。开发者可以将其解压后引入到Java项目中,以利用Groovy的灵活性和简洁性来提高开发效率。同时,需要注意的是,使用较...

    groovy文档

    闭包使得Groovy能够轻松地处理迭代、资源管理等任务,并且提供了诸如`each`, `collect`, `find`等方法,极大地提高了代码的表达力和可读性。 Groovy不仅是一门语言,更是一种理念的体现。它融合了Java的稳定性与...

    groovy初学者的福音

    6. **集合操作**:Groovy对Java的集合API进行了增强,提供了更加方便的操作方式,比如列表的`each`方法进行迭代,或者使用`collect`进行映射操作。 7. **AST转换**:在编译期间,Groovy允许开发者应用AST(抽象语法...

    Groovy.in.Action.2nd.Edition.pdf

    6. Groovy的使用场景:书中详细介绍了Groovy在多个领域的应用,包括并行和函数式编程、对象迭代方法、集合和映射增强、多线程和进程控制、文件和I/O流处理、数据库操作(SQL和NoSQL)等。 7. Web开发、测试、GUI...

    Groovy学习笔记

    - **方法定义**:定义方法与Java相似,但Groovy中可以省略`return`关键字以及返回类型。 - **命名参数**:调用方法时可以使用命名参数,这使得方法调用更为清晰。 - **闭包的传递**:闭包可以作为方法的参数传递,...

    Groovy in Action[文字版][中文]

    此外,Groovy还引入了列表和映射的便捷操作,如使用下标索引和“.”运算符访问属性,以及使用`each`或`forEach`迭代集合。 2. **闭包(Closure)**:Groovy中的闭包是其强大之处,它是一种可以捕获和存储上下文环境...

    groovy快速入门指南(中文)

    闭包是 Groovy 中的一个重要概念,类似于 Java 中的匿名内部类,但是更加强大和灵活。 **1. 定义与调用** - **基本语法** - 闭包使用 `{}` 来定义,并且可以在闭包中使用 `|` 符号来指定参数。 ```groovy ...

    精通 Groovy 中文教程

    - 创建一个简单的Groovy类,理解其与Java类的区别。 - 探讨如何声明变量、定义方法等基本语法。 **使用JUnit进行测试**: - 学习如何利用JUnit框架来测试Groovy代码。 - 掌握编写测试用例的最佳实践。 **Groovy与...

    精通Groovy

    1. **本地集合**:Groovy直接在语言层面支持列表和映射的创建,无需导入额外的包。 2. **内置的正则表达式支持**:Groovy通过特定的语法支持正则表达式的创建,简化了文本处理相关的任务。 3. **闭包**:闭包是...

    Groovy(2007,2,21)

    在Groovy中,`each`方法通常与闭包一起使用来迭代集合。 - **collect**:这是Groovy中用于转换集合的一个方法,可以将一个集合的元素转换为另一个集合,通常配合闭包使用。 此外,文档还可能介绍了Groovy的其他...

    apache groovy-2.4.8

    例如,Groovy支持闭包(closures),这是一种强大的代码块,可以用于函数式编程,使得处理集合和数据流变得更加简单。此外,Groovy的语法还允许开发者使用缩进来表示代码块,类似于Python,这使得代码看起来更整洁。...

    groovy-demo.pdf

    Groovy通过元编程支持自定义类的行为,例如,可以使用`MetaClass`来添加新的方法或属性。 ```groovy def list = [1, 2, 3] list.metaClass.sum = { delegate.sum() } println list.sum() ``` #### DSL(领域特定...

    Groovy In Action

    6. **集合与泛型**:讲解Groovy对数组、列表、映射等集合的支持,以及泛型的使用。 7. **操作文件系统**:Groovy提供了方便的API来操作文件和目录,简化文件操作任务。 8. **网络编程**:介绍如何使用Groovy进行...

Global site tag (gtag.js) - Google Analytics