2016-03-28 16 views
2

Guava kütüphanesinden MultiMap'ım var. Sadece anahtarlarla sıralamak istiyorum.Guava'nın MultiMap'ini yalnızca tuşlarla nasıl sıralayabilirim?

Multimap<String, MyObj> sortedMultiMap = 
    TreeMultimap.create(Ordering.from(new Comparator<String>() { 
     @Override 
     public int compare(String lhs, String rhs) { 
      //my comparison here 
     } 
    }), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable 
sortedMultiMap.putAll(notSortedMultiMap); 

Ama gördüğünüz gibi, TreeMultiMap.create yöntem 2 argümanları var - anahtarları ve değerleri komparatörlerini: ben denedim. MultiMap'i yalnızca tuşlarla nasıl sıralayabilirim?

cevap

3

Güncelleme özgün cevabım sorunu çözdü ve soruyu yanıtladı bile Louis Wasserman gelen cevap sonrasında bu daha zarif bir çözüm olduğunu düşünüyorum.

Multimap<String, MyObj> multimap = 
    MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build(); 

İkinci argüman olarak Ordering.arbitrary() kullanabilirsiniz, o Comparable uygulamak nesneleri gerektirmez.

ekleme sırası

Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
      Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/), 
      Lists::newLinkedList); 
+0

ama Ordering.arbitrary() rastgele sonra benim değerleri karıştırır gibi görünüyor putAll. Varsayılan siparişe ihtiyacım var, belki de Koleksiyon olarak saklanan MultiMap Değeri ile ilgili olabilir - ama LinkedList olmalıdır? – Lester

+0

Hmm, VM'nin ömrü boyunca aynı düzeni vermesi gerekiyor. “Emredilen düzene hiçbir anlam yok, ama VM'nin hayatı için sabit”. Ama belki de kullanım durumunuzda bu işe yaramıyor mu? – gustf

+1

Durumunuzda "varsayılan sıralama", "ekleme sırası" anlamına geliyor mu? – gustf

5

Kullanım MultimapBuilder gibi bir şey kullanabilirsiniz gerekirse: Ben zaten o denedi

Multimap<String, MyObj> multimap = 
     MultimapBuilder.treeKeys().linkedListValues().build(); 
+0

Nice, cevabımı kabul edilen cevap olarak bu çözümle güncelledim ve bu çözüm daha zariftir. Umarım bu sizin için iyi olur. – gustf

İlgili konular