Groovy多用户选择字段值重复检测报错实现求助
多用户选择字段重复值检测解决方案
针对多用户选择字段的重复检测,核心是利用集合的交集判断——只要两个用户集合存在共同元素,就说明有重复用户。以下是修正后的完整脚本:
// 获取两个多用户选择字段 def multiFieldA = getFieldByName('Multi User Picker A') def multiFieldB = getFieldByName('Multi User Picker B') def currentField = getFieldById(fieldChanged) // 先清空两个字段的错误提示 multiFieldA.clearError() multiFieldB.clearError() // 获取字段值(多用户字段返回的是User对象的集合,可能为null,转成空集合避免空指针) def usersA = multiFieldA.value ?: [] def usersB = multiFieldB.value ?: [] // 检查两个集合是否存在交集(即有重复用户) def duplicateUsers = usersA.intersect(usersB) if (!duplicateUsers.isEmpty()) { // 提取重复用户名拼接成提示文本 def duplicateNames = duplicateUsers.collect { it.displayName }.join(', ') currentField.setError("请选择不同的用户。以下用户已重复选择:$duplicateNames") }
关键说明:
- 多用户字段的
value返回的是List<User>类型(而非单个值),直接用intersect()方法可以快速获取两个集合的交集 - 用
?: []处理空值,避免字段未选择时出现空指针异常 - 通过
collect { it.displayName }把重复的User对象转换成用户名,让错误提示更直观
你之前代码的问题:
- 错误地直接用
contains判断集合是否包含另一个集合,正确的做法是判断集合是否存在共同元素 - 遍历逻辑有误,应该检查单个用户是否存在于另一个集合,或者直接用交集方法更高效
内容的提问来源于stack exchange,提问作者Артем Балашов
相关产品推荐
相关产品推荐

