2012-07-30 3 views
9

제가 알고있는 콜렉션의 오브젝트를 얻고 싶습니다 (기본적으로는 Collections.singletonList()의 반대입니다). 그러나 콜렉션이리스트/세트인지 여부는 모르겠습니다. 뭔가 다른 그래서 나는 c.get(0)를 사용할 수 없습니다). 현재 내가 c.iterator.next() 사용싱글 톤 콜렉션의 오브젝트 얻기

는 자바에서 그 또는 공용 라이브러리 중 하나에 대한 방법은 이미 (아파치 - 평민, 구아바 등)

답변

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

3

메소드 서명과 JavaDoc가 있는지 궁금해 명확하게 그것이라고 List.

는 서명입니다 :

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

그리고 이것은 JavaDoc을이다 :

가 지정된 오브젝트만을 포함하고있는 불변의리스트를 돌려줍니다. 반환되는리스트는 직렬화 가능합니다.

그래서, 이것은 당신이 간단하게 사용할 수 있다는 것을 의미한다 :

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

아야, 지금 나는 당신이 무슨 뜻인지 참조하십시오. 나는 당신의 질문이 분명하다는 것을 인정해야합니다. 그러나 하나 또는 다른 이유로, 나는 이해하지 못했다 :

+3

. 그들은 그것이하는 일의 역전을 원합니다 : 어떤 Collection으로부터 하나의 요소를 추출하십시오. –

+0

데이비드 말이 맞다. 내가 충분히 명확하게 설명하지 못해서 미안하다. – Alex

1

자바 8로 당신은 할 수 있습니다 : 영업 실제로`singletonList`를 사용하지 않는

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

을 사용하여 'collection.iterator()에 대한이 솔루션의 벤치 마크를 보니 흥미로울 것입니다. .next()' – Beethoven