comment trouver une chaîne dans la liste groovy
question de groovy newbie:
sql est lancé comme suit
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");
Je suis en cours d'exécution d'une requête en groovy, comme ce
def listOfRows = sql.rows (select column1 from table1);
listOfRows lors de l'impression montre le contenu comme [[column1_name:value1], [column1_name:value2], [column1_name:value3]]
Je veux vérifier si value2
(une Chaîne) existe dans la liste retournée de valeurs à partir de la requête ci-dessus.
J'ai essayé de faire listOfRows.contains('value2')
et listOfRows.find('value2')
,
il se plaint de ce que la méthode n'existe pas de listes..
quelle est la meilleure façon de le faire ?
ÉDITÉ: j'ai corrigé la liste de valeurs imprimées. Ce qui est retourné est List<GroovyResultSet>
et j'ai également ajouté à la définition de sql.
- Quelle est votre définition de
sql
? - Ce n'listOfRows contiennent en réalité? Il ne peut pas être
[column1_name:value1, column1_name:value2, column1_name:value3]
- Je seconde @tim_yates,
[column1_name:value1, column1_name:value2, column1_name:value3]
n'est même pas une carte, puisquekeys
sont les mêmes. Êtes-vous d'obtenir une liste de ces cartes avec des touches de column1, column2, ....? - Je corrige la position des mains, ce qui est renvoyée est une liste<GroovyResultSet> Correction - listOfRows lors de l'impression montre le contenu comme [[column1_name:valeur1], [column1_name:valeur2], [column1_name:valeur3]]
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de jeter un oeil à groovy de la documentation, et en particulier à la documentation des collections (les deux tutoriel et JDK/GDK).
dans ce cas, le plus adapté spécifiquement solution serait d'utiliser
Collection#find()
... avec quelque chose commeQui peut être traduit en lisible par l'homme
trouver le premier élément de cette collection chaîne contient ":valeur2".
Vous voulez probablement
listOfRows.column1
(equivalnet àlistOfRows['column1']
convertit la carte dans une liste avec le contenu de toutes les lignes de la "colonne1'.Vous êtes probablement en invoquant cette méthode qui prend un GString (notez que GString != Chaîne) comme argument. Selon cette question, une chaîne de caractères entre guillemets simples est un standard de java chaîne et d'une chaîne de caractères entre guillemets doubles est une templatable chaîne.
Essayez ceci:
ce que j'ai fait est le suivant :
de réitérer la listOfRows, obtenir toutes les valeurs de colonne1 de chaque GroovyResultSet dans un listOfValues ,puis vérifier mes valeurs dans la liste.