2012-07-30 55 views
9

我想获取集合的对象,我知道它只有一个元素(基本上它与Collections.singletonList()的作用相反 - 但我不知道集合是否为list/set /别的东西,所以我不能使用c.get(0))。获取单体集合的对象

目前我使用c.iterator.next(),如果已经存在了,在Java中或公共图书馆之一的方法(Apache的公地,番石榴等)

回答

7

Iterables.getOnlyElement()(或Iterables.getFirst(),如果收集可以是空的)。

+0

截至2016/9/16链接被打破。使用https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Iterables.html – Beethoven 2016-09-16 16:35:56

3

的方法签名和JavaDoc难怪说清楚这是一个List

这是签名:

public static <T> List<T> singletonList(T o) 

这是JavaDoc中:

返回一个只包含指定对象的不可变列表。返回的列表是可序列化的。

因此,这意味着你可以简单地使用:

List<MyClass> singleton = Collections.singletonList(myObject); 
MyClass obj = singleton.get(0); 

噢,现在我明白你的意思。我不得不承认你的问题很清楚。但是,由于某种原因,我不明白:)从番石榴

+3

的OP没有实际使用'singletonList'。他们想要的是与其所做的相反的事情:从任何“集合”中提取一个元素。 – 2012-07-30 08:08:43

+0

大卫是对的,对不起,如果我没有足够清楚地解释它 – Alex 2012-07-30 08:18:30

1

与Java 8,你可以这样做:

collection.stream().findAny().get(); 
+0

查看此解决方案的基准对照'collection.iterator()的.next()' – Beethoven 2016-09-16 16:34:17