在Groovy中从另一个中减去一个对象列表的最佳方法是什么?

当元素是对象时,是否有更古老的方法从另一个列表中减去一个列表?我认为可能有一种方法可以使用减去,但无法弄明白.这就是我所拥有的:

class item1 {
  int foo
  int getFoo(){return foo}
  public item1(id_in){ foo = id_in }
}

def list1 = [new item1(10),new item1(11),new item1(13)]
def list2 = [new item1(11),new item1(12),new item1(14)]

// list3 = list2 - list1
def list3 = list2.findAll{ !(it.foo in list1.collect{it.foo}) }
// works
assert list3.collect{it.foo} == [12,14]

这真的很不错,但如果有更好的方法,我只是好奇. This question非常相似,但寻找交叉点(巧合的是,几小时前刚刚发布),但我认为预先假定对象具有ID属性.这就是我使用我的foo属性的原因 – 我不希望解决方案需要一些与“id”相关的grails-like mojo(如果存在这样的东西)).

解决方法

你应该能够做到:

@groovy.transform.EqualsAndHashCode
class Item1 {
    int foo
    Item1(int too) {
        this.foo = too
    }
}

def list1 = [new Item1(10),new Item1(11),new Item1(13)]
def list2 = [new Item1(11),new Item1(12),new Item1(14)]

def foos = (list2 - list1).foo

相关文章

背景:    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...