Saya menggunakan TreeBidiMap
dari perpustakaan Koleksi Apache . Saya ingin mengurutkan ini pada nilai-nilai yang ada doubles
.
Metode saya adalah mengambil nilai Collection
dari menggunakan:
Collection coll = themap.values();
Yang secara alami berfungsi dengan baik.
Pertanyaan Utama: Saya sekarang ingin tahu bagaimana saya bisa mengonversi / membuang (tidak yakin mana yang benar) coll
ke dalam List
sehingga bisa diurutkan?
Saya kemudian bermaksud untuk mengulangi List
objek yang diurutkan , yang seharusnya dalam urutan dan mendapatkan kunci yang sesuai dari TreeBidiMap
( themap
) menggunakan themap.getKey(iterator.next())
tempat iterator akan berada di atas daftar doubles
.
TreeBidiMap
adalahOrderedMap
, pesanan harus ok. Penyortiran yang diperlukan dalam pertanyaan adalah pada nilai, bukan pada kunci.Jawaban:
Seperti yang dikatakan Erel Segal Halevi di bawah ini, jika coll sudah menjadi daftar, Anda dapat melewati langkah pertama. Tapi itu akan tergantung pada internal TreeBidiMap.
sumber
Sesuatu seperti ini seharusnya berfungsi, memanggil konstruktor ArrayList yang mengambil Koleksi:
sumber
Saya pikir jawaban Paul Tomblin mungkin sia-sia jika coll sudah menjadi daftar, karena itu akan membuat daftar baru dan menyalin semua elemen. Jika coll mengandung banyak elemen, ini mungkin membutuhkan waktu lama.
Saran saya adalah:
sumber
Saya yakin Anda bisa menulisnya seperti ini:
sumber
sumber
@ Kunigami: Saya pikir Anda mungkin salah tentang
newArrayList
metode Guava . Itu tidak memeriksa apakah Iterable adalah tipe daftar dan hanya mengembalikan daftar yang diberikan apa adanya. Itu selalu membuat daftar baru:sumber
Apa yang Anda minta adalah operasi yang cukup mahal, pastikan Anda tidak perlu sering melakukannya (misalnya dalam satu siklus).
Jika tidak, Anda dapat membuat koleksi khusus. Saya datang dengan yang memiliki
TreeBidiMap
dan diTreeMultiset
bawah tenda. Terapkan hanya apa yang Anda butuhkan dan pedulikan integritas data.Dengan cara ini, Anda telah disortir
Multiset
darivalues()
. Namun, jika Anda membutuhkannya untuk menjadi daftar (misalnya Anda memerlukanget(index)
metode seperti array ), Anda harus menemukan sesuatu yang lebih kompleks.sumber
keySet()
danvalues()
Views ke aslinyaMap
, jadi ketika mereka diubah dukunganMap
harus dimodifikasi juga, solusi Anda tidak mendukung iniBerikut ini adalah solusi sub-optimal sebagai one-liner:
sumber