2012-07-30 109 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