如果在搜索列表时条件无法评估为true,以查看它是否包含值

时间:2018-05-24 13:22:08

标签: java groovy

我已经用Java编写了一些代码来检查字符串列表是否包含值,并且它运行正常。但是当我尝试在Groovy中运行相同的代码时,问题出现了。

这是我在Groovy中运行的代码:

static void main(string args[]){    

int count =0;

         String needle = "UAN: 123";

        for(int i =0; i<result.size(); i++) {

            List<String> text = new ArrayList<>();
            System.out.println(result.get(i));
        }

        for(int i =0; i<result.size(); i++){
            List<String> text=new ArrayList<>();

            text.add(result.get(i)+"");
            log.info text

            for (int j=0; j<text.size(); j++){         

            if(text.get(j).contains(needle)){
                System.out.println("FOUND");
                log.info "FOUND"
                count = j;

                System.out.println("THIS IS IT: " + text.get(count));
                log.info text.get(count)   

            } }
}

它在if条件下失败,我不明白为什么,因为它在Java中完美运行。

注意:此列表中包含其他2个列表,因此我使用for循环访问内部列表并检查内部列表是否包含所需的值。

我做错了什么?

修改

这是它失败的地方:

for(int i =0; i<result.size(); i++){
                List<String> text=new ArrayList<>();

                text.add(result.get(i)+"");
                log.info text

                for (int j=0; j<text.size(); j++){         

                if(text.get(j).contains(needle)){
                    System.out.println("FOUND");
                    log.info "FOUND"
                    count = j;

                    System.out.println("THIS IS IT: " + text.get(count));
                    log.info text.get(count)   

                } }

1 个答案:

答案 0 :(得分:0)

从您的问题中不清楚您实际想要做什么,但要在groovy中搜索字符串列表,您可以执行以下操作:

def needle = "UAN: 123"
def result = ["alice", "why", "some text UAN: 123 xx", "is", "a", "writing", "desk"]
def found  = result.find { it.contains(needle) }
println found

打印:

some text UAN: 123 xx

如果你想要索引和值,你可以这样做:

def needle = "UAN: 123"
def result = ["alice", "why", "some text UAN: 123 xx", "is", "a", "writing", "desk"]
def (index, found) = result.indexed().findResult { i, s -> 
  s.contains(needle) ? [i, s] : null
}
println "found '${found}' at index ${index}"

打印:

found 'some text UAN: 123 xx' at index 2

一般来说,如果你想要做的只是遍历某个集合并找到一个值或以某种方式转换每个值,你通常不必在groovy中执行for循环,而是使用groovy扩展方法例如list.find {}map.find {}list.collect {}等。

groovy文档章节iterating on a list可能是一个很好的起点。

[澄清以下评论后的补充解决方案]

下面使用嵌套列表结构,并在以下位置找到项目和索引:

def needle = "UAN: 123"
def result = [ ["alice", "why"],
               ["is", "a", "raven"], 
               ["like", "some text UAN: 123 xx", "a"],
               ["writing", "desk"]]


def (outerIndex, innerIndex, found) = result.indexed().findResult { i, inner -> 
  inner.indexed().findResult { j, s -> 
    s.contains(needle) ? [i, j, s] : null
  }
}

println "value '$found' found at outer index $outerIndex and inner index $innerIndex"

打印:

value 'some text UAN: 123 xx' found at outer index 2 and inner index 1