# groovy对象比较

> 本文摘自 [groovy中对象的比较以及非空判断](https://blog.csdn.net/chenwill3/article/details/23615509) 原文比较简洁实用，记录备用。

## 字符串是否包含在数组中

结合 `in` 和 `for` 循环可以很容易判断字符串是否包含在数组中:

```groovy
def arr=["上海", "南京", "福州"]
for(item in arr){
    println itme
}
```

> 我在写shell脚本中也经常使用类似方式:

```bash
for i in `ls ~`;do
    wc -l $i
done
```

## groovy对象表

groovy可以比较字符串、map结合、list结合

* 字符串比较

```groovy
def str1="Hello World1"
if("Hello World"==str1){
    println "Hello World"
} else {
    println "不匹配"
}
```

* map集合的比较

```groovy
def m1=["name":"李明", "age":20]
def m2=["name":"李明", "age":21]
if(m1==m2){
    println "m1和m2匹配"
} else {
    printlsn "m1和m2不匹配"
}
```

* 如果要比较两个对象的引用是否相同，可以使用 `is` :

```groovy
println m1.is(m3)
```

## 判断对象是否为空

groovy中判断对象是否为空，可以直接使用 `if(对象){}` :

```groovy
def m5=["name":"Lucy"]
//判断map集合是否为空（字符串或list都可以这么判断）
if (m5) {
    println "m5不为空"
}
```

另外，Groovy提供了 `isEmpty()` 方法来判断列表是否包含元素，如果空则返回true

```groovy
class Example { 
   static void main(String[] args) { 
      def lst = [11, 12, 13, 14]; 
      def emptylst = [];

      println(lst.isEmpty()); 
      println(emptylst.isEmpty()); 
   } 
}
```

## 组合的案例

```groovy
package org.lxh
public class UseRange{

    public static void main(def args){
        //定义一个range
        def range=1..15
        println range.contains(10);
        println range.from;
        println range.to;
        //使用range输出7天的日期
        def today = new Date()
        def nextWeek = today + 7
        (today..nextWeek).each{
            println it
        }
        //in的用法------(重要)
        def arr=["上海","南京","福州"]
        for(item in arr){
           println  item
        }
        //groovy对象的比较比较---（重要）
        //1.字符串比较
        def str1="Hello World1"
        if("Hello World"==str1){
            println "Hello World"
        }else{
            println "不匹配"
        }
        //2.map集合的比较（list集合也可以这样比较）----（重要）
        def m1=["name":"李明","age":20]
        def m2=["name":"李明","age":21]
        def m3=["name":"李明","age":21]
        if(m1==m2){
            println "m1和m2匹配"
        }else{
            println "m1和m2不匹配"
        }
        //判断对象的引用是否相同---(重要)
        println m1.is(m3)
        //if判断对象是否为空
        def m5=["name":"Lucy"]
        //判断map集合是否为空（字符串或list都可以这么判断）----（重要）
        if(m5){
           println "m5不为空"
        }
        //更为方便的判断对象是否为空的操作符 ?.-------(重要)
        println "${m5?.name}"
    }
}
```

## 参考

* [groovy中对象的比较以及非空判断](https://blog.csdn.net/chenwill3/article/details/23615509)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://huataihuang.gitbook.io/cloud-atlas-draft/develop/java/groovy/groovy_compare_object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
