如果我知道包含单个元素的Set,那么提取它的最佳方法是什么?我能想到的最好的是这个,但它并不觉得非常时髦:
set = [1] as Set
e = set.toList()[0]
assert e == 1
Run Code Online (Sandbox Code Playgroud)
如果我正在处理一个列表,我有很多很好的方法来获取元素,其中没有一个似乎与集合一起使用:
def list = [1]
e = list[0]
(e) = list
e = list.head()
Run Code Online (Sandbox Code Playgroud)
Dón*_*nal 20
另一种可能性(可在Java或Groovy中使用):
set.iterator().next()
Run Code Online (Sandbox Code Playgroud)
ig0*_*774 15
一些替代方案,其中没有一个非常漂亮:
set.iterator()[0]
set.find { true }
set.collect { it }[0]
Run Code Online (Sandbox Code Playgroud)
最后,如果确保该集合只有一个项目:
def e
set.each { e = it }
Run Code Online (Sandbox Code Playgroud)
根本的问题,当然,是Java集提供了没有定义的订单(如中提到的Javadoc),因此没有获得第n个元素(讨论能力,在这个问题上和这一个).因此,任何解决方案总是以某种方式将集合转换为列表.
我的猜测是前两个选项中的任何一个都涉及最少的数据复制,因为它们不需要构建一个完整的集合列表,但对于一个单元素集合,这几乎不应该是一个问题.