아파치 컬렉션]1 라이브러리에서 TreeBidiMap
을 사용하고 있습니다. 이 값을 더블
인 값으로 정렬하고 싶습니다.
내 방법은 다음을 사용하여 값의 컬렉션
을 검색하는 것입니다:
Collection coll = themap.values();
이는 당연히 잘 작동합니다.
주요 질문: 이제 콜
을 목록
으로 변환/캐스트(어느 것이 맞는지 잘 모르겠습니다)하여 정렬할 수 있도록 하는 방법을 알고 싶습니다.
그런 다음 정렬 된 List
객체를 반복하고 순서대로 TreeBidiMap
(themap
)에서 적절한 키를 가져 와서 themap.getKey (iterator.next ())
를 사용하여 반복자가 doubles
목록에 대해 반복하려고합니다.
List list = new ArrayList(coll);
Collections.sort(list);
아래 Erel Segal Halevi의 설명에 따르면, coll이 이미 목록인 경우 1단계를 건너뛸 수 있습니다. 하지만 이는 TreeBidiMap의 내부에 따라 달라집니다.
List list;
if (coll instanceof List)
list = (List)coll;
else
list = new ArrayList(coll);
컬렉션을 취하는 ArrayList 생성자를 호출하면 다음과 같이 작동합니다:
List theList = new ArrayList(coll);
폴 Tomblin& 생쥐라. # 39 의 경우 이미 고 답할 수 있기 때문에 새로운 목록을 작성하고 콜은 바뀌엇어요 복사 및 모든 요소. 콜은 에르메렌츠 많이 있는 경우, 이 시간이 오래 걸릴 수 있습니다.
내 제안에 입니다.
List list;
if (coll instanceof List)
list = (List)coll;
else
list = new ArrayList(coll);
Collections.sort(list);
@Kunigami: I think you ',' # 39 의 항성으로 오인될 수 약 Guava& 뉴어레이리스트 메서드입니다. 여부를 확인하지 않는 것을 있는 그대로 나열하십시오 반품하십시오 유형 및 앨리어스가 이트레이블 목록이다. It 항상 새로운 목록을 만듭니다.
@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
checkNotNull(elements); // for GWT
// Let ArrayList's sizing logic work, if possible
return (elements instanceof Collection)
? new ArrayList<E>(Collections2.cast(elements))
: newArrayList(elements.iterator());
}
그렇지 않으면 사용자 정의 모음을 만들 수 있습니다. 내가 '아래' 와 '네' 는 지었지 방정식입니다 트리비디마프 트리멀티스트 후드요. 필요한 것만 신경 구현하십시오 데이터 무결성입니다.
class MyCustomCollection implements Map<K, V> {
TreeBidiMap<K, V> map;
TreeMultiset<V> multiset;
public V put(K key, V value) {
removeValue(map.put(key, value));
multiset.add(value);
}
public boolean remove(K key) {
removeValue(map.remove(key));
}
/** removes value that was removed/replaced in map */
private removeValue(V value) {
if (value != null) {
multiset.remove(value);
}
}
public Set keySet() {
return map.keySet();
}
public Multiset values() {
return multiset;
}
// many more methods to be implemented, e.g. count, isEmpty etc.
}
이렇게 하면 '에서' '반환되었습니다 투명지에 sorted 중복집합 값 ()'. 그러나 바뀌엇어요 수 있도록 하는 경우 (예를 들어 같은 어레이입니다 합니다 (index) '' get method), 거짓 할; d # 39 you& 좀 더 복잡하다.