在Java中,我经常会遇到一个包含一个元素的集合,我需要检索它。因为集合不保证一致的排序,所以没有first()
或get(int index)
方法,因此我需要使用相当丑陋的东西,例如:
public Integer sillyExample(Collection<Integer> collection){
if(collection.size()==1){
return collection.iterator().next();
}
return someCodeToDecideBetweenElements(collection);
}
那么,你如何获得唯一的元素?我无法相信没有更好的方法......
请注意,我知道没有“第一”的概念,我只是试图避免在我知道只有一个元素的情况下构建迭代器。
编辑:Peter Wooster发现了一个非常相似的问题here。我将这个开放,因为我不是想要获得“第一”元素,这意味着一致的排序,但在检查它确实是唯一的元素之后是“唯一的”元素。答案 0 :(得分:23)
最简单的答案就是你做过的事情!
first = collection.iterator().next();
请注意iterator()是一个方法,是一个错字吗?
答案 1 :(得分:13)
你有没看过谷歌番石榴?如果您知道该集合只有一个元素 ,则可以使用Iterables.getOnlyElement(collectionWithOneElement);
,但如果您不知道但仍然只想要第一个元素,则可以使用getFirst(Iterable, T default)
。如果它为空,它也会返回你定义的默认值。
答案 2 :(得分:0)
它很简单,
Iterator<Integer> itr = collection.iterator();
Object firstObj = itr.hasNext()? itr.next() : null;