我有一个像[0, 1, 2, 3, 4, 2, 1]的列表,我想为该列表中每个相等的元素元组打印一条警告消息。所以鉴于上面的列表,我想做些类似的事情

[0, 1, 2, 3, 4, 2, 1].someMethodIDontKnow { Int num, List owner ->
    if(owner.contains(num)) println "warning, multiple "+ num +" detected"
    println it
}

我当然可以保存列表,然后像这样:
List<Int> numlist = [0, 1, 2, 3, 4, 2, 1]
numlist.each {
    if (numList.contains(it)) println "warning, multiple "+ it +" detected"
    println it
}

但这并不像以前的代码那么简洁,特别是当它发生在诸如此类的其他调用行中时:
List somelist
//...
somelist
.findAll{...}
.intersect{...}
//check for some warnings here
.collect{...}
.unique{...}

我想避免将列表分配给变量,如果我可以做不同的话。

也许有一些收集方法从我的眼中溜走了?

最佳答案

这个怎么样?

[0, 1, 2, 3, 4, 2, 1].groupBy().each { k, v ->
    if (v.size() > 1) {
        println "Warning: multiple $k detected"
        println k
    }
}

09-04 09:32
查看更多