对于这个问题,在Groovy中需要选择哪个实现?

对于这个问题,在Groovy中需要选择哪个实现?,groovy,Groovy,我已经学习Groovy一周了,但我有一个问题:我需要将单词组合存储到相应的ascii值。例如,单词“the”和每个字符的ascii值之和的组合为10(不确切,但仍然是示例) 显然,还有其他一些单词,其中ascii值的总和为10。我想要一个数据结构,在这里我可以查找值10,得到ascii值之和为10的单词。我不能在Groovy Map中这样做,因为键值应该是唯一的。如何在Groovy中做到这一点?Int到字符串列表的映射应该可以解决这个问题。只需将具有相同总和的单词添加到与关键字对应的列表中。您需

我已经学习Groovy一周了,但我有一个问题:我需要将单词组合存储到相应的ascii值。例如,单词“the”和每个字符的ascii值之和的组合为10(不确切,但仍然是示例)


显然,还有其他一些单词,其中ascii值的总和为10。我想要一个数据结构,在这里我可以查找值10,得到ascii值之和为10的单词。我不能在Groovy Map中这样做,因为键值应该是唯一的。如何在Groovy中做到这一点?

Int到字符串列表的映射应该可以解决这个问题。只需将具有相同总和的单词添加到与关键字对应的列表中。

您需要一个多映射数据结构。可以在Apache Commons、Guava中找到


在Groovy中,您可以使用一个简单的
Map
of
int
->
list
,为方便起见,它带有默认值。

下面是一个小示例,在首次使用
with default
方法请求密钥时,启动一个
Map
,返回一个空的
列表

def map = [:].withDefault { [] }

map[10] << 'the'
map[10] << 'as'
map[20] << 'from'

assert map[10] == ['the', 'as']
assert map[20] == ['from']
defmap=[:].withDefault{[]}

map[10]您也可以这样做:

def words = [ 'the', 'het', 'love', 'groovy' ]

words.groupBy { ( it as char[] ).collect { it as int }.sum() }
这给了你一张地图:

[321:[the, het], 438:[love], 678:[groovy]]

感谢您回答我关于Groovy的第二个问题:-)看到这一点后,我想我必须非常好地掌握Groovy闭包:):)这是如何工作的?如果我们在闭包中使用默认值调用空列表,那么这将如何转换map函数?