如何检查列表是否包含子列表

Omn*_*ent 8 groovy

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}"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想检查big list(list)是否包含sublist(l)的所有元素是否groovy有任何内置方法来检查这个或我在上面的代码中会有什么?

Chr*_*orf 25

您可以使用Groovy的Collection.intersect(Collection right)方法并检查返回的Collection是否与作为参数传递的Collection一样大.

您必须先使用该String.tokenize()方法从String生成List,而不是String.split()返回String数组:

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

assert sublist.size() == list.intersect(sublist).size()
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Groovy的Object.every(Closure closure)方法并检查子列表中的每个元素是否包含在列表中:

assert sublist.every { list.contains(it) }
Run Code Online (Sandbox Code Playgroud)

但是,最简单的方法是使用标准的Java Collection API:

assert list.containsAll(sublist)
Run Code Online (Sandbox Code Playgroud)


小智 7

最简单的方法就是调用:

list.containsAll(l)
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关它的更多信息:Groovy Collections