【问题标题】:how to to find a string in groovy list如何在 groovy 列表中查找字符串
【发布时间】:2013-12-30 16:14:45
【问题描述】:

来自一个时髦的新手的问题:

sql初始化如下

 final Binding binding = new Binding();  
 binding.setProperty("sql", sql);
final groovy.sql.Sql sql = Sql.newInstance(dbConfig.getUrl(), dbConfig.getUserName(), dbConfig.getPasswd(),"oracle.jdbc.OracleDriver");

我正在像这样在 groovy 中运行查询

def listOfRows = sql.rows (select column1 from table1);

listOfRows 打印时显示类似[[column1_name:value1], [column1_name:value2], [column1_name:value3]]的内容

我想检查上述查询返回的值列表中是否存在value2(字符串)。

我试过listOfRows.contains('value2')listOfRows.find('value2'), 它抱怨列表不存在该方法..

最好的方法是什么?

已编辑:我已更正打印值列表。返回的是List<GroovyResultSet> 而且我还添加了sql的定义。

【问题讨论】:

  • 你对sql的定义是什么?
  • listOfRows 实际上包含什么?不能是[column1_name:value1, column1_name:value2, column1_name:value3]
  • 我第二个@tim_yates,[column1_name:value1, column1_name:value2, column1_name:value3] 甚至不是地图,因为keys 是相同的。您是否获得了带有 column1、column2 等键的映射列表?
  • 我已更正,返回的是 list 更正 - listOfRows 打印时显示的内容如 [[column1_name:value1]、[column1_name:value2]、[column1_name:value3]]

标签: grails groovy


【解决方案1】:

我建议您查看 groovy 文档,尤其是集合文档(tutorialJDK/GDK)。

在这种情况下,最适合的解决方案是使用 Collection#find() ... 类似

listOfRows.find { it.contains(':value2') }

可以翻译成人类可读的

在这个集合中找到第一个包含“:value2”的元素。

【讨论】:

【解决方案2】:

你可能想要

listOfRows.column1.contains( 'value2' )

【讨论】:

  • 只是补充一点:listOfRows 是地图列表,其中包含从数据库中读取的数据。以列名作为键,表达式listOfRows.column1(等价网络到listOfRows['column1'] 将映射转换为列表中的“column1”所有行的内容。
  • 正如我提到的,我是 Groovy 新手,我无法弄清楚执行此操作的正确语法.. (a) listOfRows.column1.contains('value2') (b) listOfRows['column1 '].contains('value2') 都不起作用..
【解决方案3】:

您可能正在调用 this method,它将 GString(注意 GString != String)作为参数。根据this question,单引号中的字符串是标准的java字符串,双引号中的字符串是可模板化的字符串。

'hello'    //java.lang.String
"hello"    //groovy.lang.GString

试试这个:

listOfRows.contains("value2")

【讨论】:

    【解决方案4】:

    我最终做的是:

    迭代 listOfRows,将 column1 的所有值从每个 GroovyResultSet 中获取到 listOfValues 中,然后在该列表中检查我的值。

    def listOfValues=[];
    listOfRows.collect(listOfValues){it.getAt('column1')};
    if(listOfValues.size()==3){
      println('success');
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多