2009-12-09 116 views
7
def l = ["My", "Homer"] 
String s = "Hi My Name is Homer" 

def list = s.split(" ") 
println list 

list.each{it -> 
    l.each{it1 -> 
     if (it == it1) 
      println "found ${it}" 
    } 
} 

Quiero comprobar si lista grande (list) contiene todos los elementos de la lista secundaria (l) ¿Se maravilloso tiene ningún construida en métodos para comprobar esto o lo que tienen en el el código anterior hará?cómo comprobar si una lista contiene una lista secundaria

Respuesta

18

Puede usar el método Collection.intersect(Collection right) de Groovy y comprobar si la Colección devuelta es tan grande como la que se aprobó como argumento.

usted tiene que utilizar el método String.tokenize() antes de generar una lista de la cadena en lugar de String.split() que devuelve una matriz de cadenas:

def sublist = ["My", "Homer"] 
def list = "Hi My Name is Homer".tokenize() 

assert sublist.size() == list.intersect(sublist).size() 

Como alternativa, puede utilizar el método de Groovy Object.every(Closure closure) y comprobar si cada elemento de la sublista está contenida en la lista:

assert sublist.every { list.contains(it) } 

Sin embargo, el camino más corto es el uso de la API estándar de Java Collection:

assert list.containsAll(sublist) 
-2

Su solución funcionará. Asegúrese de considerar el Knuth–Morris–Pratt algorithm si se trata de arreglos grandes de relativamente pocos valores discretos.

+0

Él no estaba preguntando si su solución funcionaría o no, que estaba pidiendo si hubiera alguna función incorporada que pudiera usar para hacer esto en su lugar. – Gord

+0

No conozco ninguno. – Matthew

7

El método más fácil es sólo para llamar:

list.containsAll(l) 

Puede encontrar más información sobre él aquí: Groovy Collections

Cuestiones relacionadas