Groovy 查找和修改集合中的重复项
我需要查找和修改集合中的重复条目 我可以做以下工作,这很有效,但需要几个步骤 是否有一种更干净的方法来实现最终输出,指示所有具有重复项的条目Groovy 查找和修改集合中的重复项,groovy,Groovy,我需要查找和修改集合中的重复条目 我可以做以下工作,这很有效,但需要几个步骤 是否有一种更干净的方法来实现最终输出,指示所有具有重复项的条目 void "test find and mark duplicate entries"() { given: def sports = ["baseball", "basketball", "football", "basketball", "basketball", "football", "soccer", "volleyball"]
void "test find and mark duplicate entries"() {
given:
def sports = ["baseball", "basketball", "football", "basketball", "basketball", "football", "soccer", "volleyball"]
when:
def duplicateEntries = sports.findAll { sports.count(it) > 1 }.unique()
then:
duplicateEntries == ["basketball", "football"]
when:
sports = sports.collect {
if (duplicateEntries.contains(it)) {
return it + "-dupe"
} else {
return it
}
}
then:
sports == ["baseball", "basketball-dupe", "football-dupe", "basketball-dupe", "basketball-dupe", "football-dupe", "soccer", "volleyball"]
}
下面的代码可能会稍微短一点,但我不希望在这里出现奇迹;)
从@Opal扩展答案。这一个使用groupBy
def sports = ["baseball", "basketball", "football", "basketball", "basketball", "football", "soccer", "volleyball"]
def groupBy=sports.groupBy ().collect { it.value.size()>1 ? "$it.key-dupe" : "$it.key" }
println( groupBy)
与其他答案一样复杂,只是内存效率更高;-)
检查或这是否有帮助。不起作用:最后一个断言将失败。你失去了顺序,最终列表的大小与预期列表的大小不一样。这是简洁明了的(好的,在阅读相关文档后请直截了当)。必须是公认的答案。太棒了,谢谢!我不得不稍微修改它以使测试通过,因为collect不会修改原始集合,但这比我所做的要简单得多
sports=sports.collect{sports.count(it)>1?“$it dupe”:it}
def sports = ["baseball", "basketball", "football", "basketball", "basketball", "football", "soccer", "volleyball"]
def groupBy=sports.groupBy ().collect { it.value.size()>1 ? "$it.key-dupe" : "$it.key" }
println( groupBy)
def sports = ["baseball", "basketball", "football", "basketball", "basketball", "football", "soccer", "volleyball"]
sports.collect { sports.count(it) > 1 ? "$it-dupe" : it }