一、简介
Groovy是构建在JVM上的一个轻量级却强大的动态语言, 它结合了Python、Ruby和Smalltalk的许多强大的特性。
Groovy就是用Java写的 , Groovy语法与Java语法类似, Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码, 相对于Java, 它在编写代码的灵活性上有非常明显的提升,Groovy 可以使用其他 Java 语言编写的库。
Groovy基于Java编写的一门语言。
二、测试
导入依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>3.0.7</version>
<type>pom</type>
</dependency>
集成测试类
package com.qiang.groovy.other
/**
@author 小强崽
@create: 2021-04-08 23:39:38
@description: Groovy基本语法测试
*/
class GroovyTest extends GroovyTestCase {
/**
* 测试输出
*/
void testPrintln() {
// 111
println(111)
// 111
println 111
// println
println("println")
}
/**
* 定义变量
*/
void testDef() {
def num = 1
def str1 = 'hello'
def str2 = "word"
def str3 = ''' asdasd '''
def str4 = "${str1} word"
// 1
println(num)
// hello
println(str1)
// word
println(str2)
// asdasd
println(str3)
// hello word
println(str4)
}
/**
* 测试断言
*/
void testAssert() {
def num = 1
// ======断言等于2会报错====== //
// assert num == 2
// | |
// 1 false
// ======================== //
assert num == 1
}
/**
* 定义数组
*/
void testArray() {
def array = ['xiao', 'qiang']
// [xiao, qiang]
println(array)
}
/**
* 向数组添加一个元素
*/
void testAddArray() {
def array = ['xiao', 'qiang']
array << 'zai'
// [xiao, qiang, zai]
println(array)
}
/**
* 遍历数组
*/
void testForArray() {
def list = ['xiao', 'qiang', 'zai']
// 第一种for循环遍历
for (def element : list) {
println(element)
}
// 第二种for循环遍历
for (i in 0..<list.size()) {
println(list[i])
}
// lambda表达式
list.each { element -> println(element) }
// 闭包遍历
list.forEach({ element -> println(element) })
// 迭代器遍历
list.iterator().forEachRemaining({ element -> println(element) })
}
/**
* 定义一个集合
*/
void testMap() {
def map = ['name': 'qiang', 'age': 18]
// [name:qiang, age:18]
println(map)
}
/**
* 向集合添加数据
*/
void testAddMap() {
def map = ['name': 'qiang', 'age': 18]
map.sex = '男'
map['address'] = '马尔达夫'
// [name:qiang, age:18, sex:男, address:马尔达夫]
println(map)
}
/**
* 输出Java类型
*/
void testGetClass() {
def map = ['name': 'qiang', 'age': 18]
// class java.util.LinkedHashMap
println map.getClass()
}
/**
* 定义闭包
*/
void testClosure() {
// 闭包定义
def c1 = { p ->
println(p)
}
def c2 = {
println 333
}
// hello world
m1(c1)
// 333
m2(c2)
}
/**
* 传参,调用从c1闭包
* @param closure
* @return Void
*/
static def m1(Closure closure) {
closure('hello world')
}
/**
* 不传参,调用从c2闭包
* @param closure
* @return Void
*/
static def m2(Closure closure) {
closure()
}
/**
* 找出符合集合的元素
*/
void testListFindAll1() {
def list = ["1", "2", "3", "1", "4", "5", "6"]
def result = list.findAll { it ->
it == "1"
}
// [1, 2, 3, 1, 4, 5, 6]
println(list)
// [1, 1]
println(result)
}
/**
* 找出符合集合的元素
*/
void testListFindAll2() {
def list = ["1", "2", "3", "1", "4", "5", "6"]
def result = list.findAll { it ->
// is相当于 ==
it.is("5")
}
// [1, 2, 3, 1, 4, 5, 6]
println(list)
// [5]
println(result)
}
/**
* 是否包含元素,返回一个布尔值
*/
void testListAny() {
def list = ["1", "2", "3", "1", "4", "5", "6"]
def result = list.any() { it ->
// is相当于 ==
it.is("5")
}
// [1, 2, 3, 1, 4, 5, 6]
println(list)
// true
println(result)
}
/**
* 找出集合中匹配的元素
*/
void testListFind1() {
def list = ["1", "2", "3", "1", "4", "5", "6"]
def result = list.find() { it ->
// is相当于 ==
it.is("5")
}
// [1, 2, 3, 1, 4, 5, 6]
println(list)
// 5
println(result)
}
/**
* 找出集合中匹配的元素
*/
void testListFind2() {
def list = ["qiang", "2", "3", "1", "4", "5", "6"]
def result = list.find() { it ->
// 返回第一个不为空的元素
true
}
// [1, 2, 3, 1, 4, 5, 6]
println(list)
// qiang
println(result)
}
/**
* 遍历List
*/
void testListEach() {
def list = ["qiang", "2", "3", "1", "4", "5", "6"]
list.each { it ->
// qiang 2 3 1 4 5 6
println(it)
}
}
/**
* *.展开操作符
*/
void testAsterisk() {
def list1 = ["xiao", "qiang", "zai", "www", "wu", "duo", "qiang", "com"]
def list2 = list1*.toUpperCase()
// [XIAO, QIANG, ZAI, WWW, WU, DUO, QIANG, COM]
println(list2)
}
/**
* 遍历Map
*/
void testMapEach() {
def map = ['name': 'qiang', 'age': 18, 'address': 'hainan']
map.each { it ->
// name age address
println(it.key)
// qiang 18 hainan
println(it.value)
}
// 遍历 map 集合
def result = map.find { key, value ->
// 模糊查询
value =~ "qiang"
}
// name=qiang
println(result)
}
/**
* 找出符合集合的元素
*/
void testMapFindAll() {
def map = ['name': 'qiang', 'age': 18, 'address': 'hainan']
def result = map.findAll { key, value ->
key.is("name")
value == "qiang"
}
// [name:qiang]
println(result)
}
/**
* 是否包含元素,返回一个布尔值
*/
void testMapAny() {
def map = ['name': 'qiang', 'age': 18, 'address': 'hainan']
def result = map.any { key, value ->
key.is("name")
value == "zai"
}
// false
println(result)
}
/**
* 找出集合中匹配的元素
*/
void testMapFind() {
def map = ['name': 'qiang', 'age': 18, 'address': 'hainan']
def result = map.find { key, value ->
key.is("name")
value == "qiang"
}
// name=qiang
println(result)
}
}