我想获取集合的对象,我知道它只有一个元素(基本上它与Collections.singletonList()
的作用相反 - 但我不知道集合是否为list/set /别的东西,所以我不能使用c.get(0)
)。获取单体集合的对象
目前我使用c.iterator.next()
,如果已经存在了,在Java中或公共图书馆之一的方法(Apache的公地,番石榴等)
我想获取集合的对象,我知道它只有一个元素(基本上它与Collections.singletonList()
的作用相反 - 但我不知道集合是否为list/set /别的东西,所以我不能使用c.get(0)
)。获取单体集合的对象
目前我使用c.iterator.next()
,如果已经存在了,在Java中或公共图书馆之一的方法(Apache的公地,番石榴等)
Iterables.getOnlyElement()
(或Iterables.getFirst()
,如果收集可以是空的)。
的方法签名和JavaDoc难怪说清楚这是一个List
。
这是签名:
public static <T> List<T> singletonList(T o)
这是JavaDoc中:
返回一个只包含指定对象的不可变列表。返回的列表是可序列化的。
因此,这意味着你可以简单地使用:
List<MyClass> singleton = Collections.singletonList(myObject);
MyClass obj = singleton.get(0);
噢,现在我明白你的意思。我不得不承认你的问题很清楚。但是,由于某种原因,我不明白:)从番石榴
的OP没有实际使用'singletonList'。他们想要的是与其所做的相反的事情:从任何“集合”中提取一个元素。 – 2012-07-30 08:08:43
大卫是对的,对不起,如果我没有足够清楚地解释它 – Alex 2012-07-30 08:18:30
与Java 8,你可以这样做:
collection.stream().findAny().get();
查看此解决方案的基准对照'collection.iterator()的.next()' – Beethoven 2016-09-16 16:34:17
截至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