Groovy中如何对比格式不同的两个列表并判断元素是否存在
实现方案
核心问题说明
你尝试的方案失效主要有两个底层错误:
- 你定义的
def a = [kitkat lollypop orea android-11]不是合法Groovy列表,结合你后续调用split(" ")的操作来看,a实际为空格分隔的字符串,正确声明应为def a = "kitkat lollypop orea android-11" - 变量b是标准
List<String>类型,无需调用split(",")拆分,该方法为字符串专属,List原生支持contains方法做存在性判断。
最简实现
def a = "kitkat lollypop orea android-11" def b = ["kitkat", "lollypop", "honeycomb", "nougat", "android-11"] a.split(" ").each { item -> if (b.contains(item)) { // 元素共有时执行的逻辑 } else { // 元素仅在a中存在时执行的逻辑 } }
如果需要将a转为标准列表长期复用,或需要直接取交集,用以下写法:
// a转标准列表 def listA = a.split(" ").toList() // 直接取公共元素 def commonItems = listA.intersect(b)
原有写法错误点
- 嵌套遍历/双层for循环:冗余且效率低,List原生的
contains方法已经封装了存在性判断逻辑 - 对b调用split方法:b本身是列表不是字符串,调用该方法会直接抛出NoSuchMethodException
- 直接调用a.intersect(b):a是字符串类型,没有intersect方法,必须先转为列表后调用
内容的提问来源于stack exchange,提问作者ek777
相关产品推荐
相关产品推荐

