Groovy:检测列表中重复的非连续值的最简单方法

我知道在Groovy中,
如果

list = [1,2,3,1]

什么时候

list.unique()

带着回归

[1,3]

但是,如果我想检测列表中重复,非连续项目的重复值.我怎样才能做到这一点?

detect([1,1]) => true
detect([1,2]) => true
detect([1,1,3]) => false
detect([1,4]) => false

谢谢.

编辑:
添加这两个案例

detect([1,1]) => true

true表示发生任何非连续的重复.

解决方法

你应该能够MetaClass列表并添加自己的检测方法,如下所示:

List.MetaClass.detect = {
  def rslt = delegate.inject([]){ ret,elem ->
      ret << (ret && ret.last() != elem ? elem : !ret ? elem : 'Dup')
  }
  return (!rslt.contains('Dup') && rslt != rslt.unique(false))
}

assert [1,1].detect() == true //Non-consecutive Dups 1
assert [1,2].detect() == true //Non-consecutive Dups 2
assert [1,3].detect() == false //Consecutive Dups 1
assert [1,3].detect() == false //Consecutive Dups 2 and 3
assert [1,4].detect() == false //Unique no dups

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...