Saya telah melakukan pemindaian cepat terhadap Guava API dan jenis koleksi baru yang disediakannya ( Multimap
dan BiMap
misalnya tampak bermanfaat) dan saya berpikir untuk menyertakan perpustakaan dalam proyek yang sedang saya kerjakan.
Namun, saya juga ragu-ragu untuk memasukkan perpustakaan mau tak mau jika tidak ada manfaatnya dan mempelajari fitur-fitur itu menghabiskan waktu yang berharga.
Sudahkah Anda memasukkan perpustakaan Guava dalam proyek Anda dan telah terbukti bermanfaat dengan cara yang tidak terduga? Apakah Anda akan selalu menggunakannya di masa depan? Apa manfaat / penghematan waktu utamanya? Apa saja fitur tersembunyinya?
Jawaban:
Serius, semua yang ada di Jambu berguna. Saya sudah menggunakannya cukup lama, dan saya masih selalu menemukan sesuatu yang baru yang bisa saya lakukan dengannya yang membutuhkan lebih sedikit kode daripada melakukannya dengan tangan.
Beberapa hal yang orang lain belum sebutkan yang saya sukai:
Multimap
Hanya hebat. Kapan pun Anda akan menggunakan sesuatu sepertiMap<Foo, Collection<Bar>>
, gunakan multimap sebagai gantinya dan simpan sendiri satu ton pemeriksaan yang membosankan untuk koleksi yang ada yang dipetakan ke sebuah kunci dan buat serta tambahkan jika itu tidak ada.Ordering
sangat bagus untuk membangunComparator
yang berperilaku seperti yang Anda inginkan.Maps.uniqueIndex
danMultimaps.index
: metode-metode ini mengambil aIterable
dan aFunction
dan membangunImmutableMap
atauImmutableListMultimap
yang mengindeks nilai-nilai padaIterable
hasil penerapan fungsi masing-masing. Jadi dengan fungsi yang mengambil ID suatu item, Anda dapat mengindeks daftar item dengan ID mereka dalam satu baris.filter
,,transform
dll. Terlepas dari kejelasan penggunaan kelas untukFunction
s danPredicate
s, saya merasa ini berguna. Saya memberikan contoh satu cara untuk membuat ini dibaca dengan baik di sini .ComparisonChain
adalah kelas kecil, mudah diabaikan yang berguna ketika Anda ingin menulis metode perbandingan yang membandingkan beberapa nilai berturut-turut dan harus kembali ketika perbedaan pertama ditemukan. Ini menghilangkan semua kebosanan itu, membuatnya hanya beberapa baris panggilan metode dirantai.Objects.equal(Object,Object)
- null sama dengan safe.Objects.hashCode(Object...)
- cara mudah untuk mendapatkan kode hash berdasarkan beberapa bidang kelas Anda.Objects.firstNonNull(Object,Object)
- mengurangi kode untuk mendapatkan nilai default jika nilai pertama adalah null, terutama jika nilai pertama adalah hasil dari pemanggilan metode (Anda harus menetapkannya ke variabel sebelum melakukan ini dengan cara normal).CharMatcher
Sudah disebutkan, tapi mereka sangat kuat.Throwables
memungkinkan Anda melakukan beberapa hal yang menyenangkan dengan throwable, sepertiThrowables.propagate
yang memikirkan kembali throwable jika itu adalahRuntimeException
atau atauError
membungkusnya denganRuntimeException
dan melemparkannya sebaliknya.Saya pasti bisa melanjutkan, tetapi saya harus mulai bekerja. =) Ngomong-ngomong, meskipun saya telah mendaftarkan beberapa hal yang saya suka di sini, kenyataannya adalah bahwa segala sesuatu di Jambu berguna dalam beberapa situasi atau lainnya. Sebagian besar berguna sangat sering. Saat Anda menggunakannya, Anda akan menemukan lebih banyak kegunaan. Tidak menggunakannya akan terasa seperti memiliki satu tangan diikat di belakang Anda.
sumber
ComparisionChain
.Saya telah menggunakan Guava secara efektif selama beberapa tahun, di dalam Google - dan ini luar biasa.
Bagian yang sangat saya sukai adalah:
Charsets.*
- sangat sederhana, sangat bergunaSplitter
/Joiner
Preconditions
sumber
Saya awalnya menggunakannya untuk koleksi steno. Misalnya, alih-alih:
kamu bisa melakukan ini:
Juga mudah mengisi peta:
Sekarang, saya telah menemukan beberapa utilitas bermanfaat lainnya yang ada di Jambu. Misalnya, kelas CharMatcher memungkinkan Anda untuk mencocokkan urutan karakter. Anda dapat melakukan:
atau
sumber
Metode precomputed () ( sumber ) CharMatcher adalah "fitur tersembunyi" yang bagus yang saya temukan pada suatu hari.
Ini benar-benar hanya optimasi, yang membuat tabel pencarian (menggunakan bit array), dan kemudian hanya mencari karakter untuk melihat apakah mereka "cocok".
Ini adalah jenis optimasi tersembunyi yang dapat Anda manfaatkan saat menggunakan perpustakaan, yang mungkin tidak Anda pikirkan sendiri dalam kode Anda sendiri.
Tentu saja, jika Anda membuat CharMatcher kompleks, yang Anda rencanakan akan digunakan berkali-kali, Anda harus ingat untuk memanggil metode precomputed (), seperti:
sumber
Berikut adalah video YouTube dari Google (pembicara: Kevin Bourrillion, insinyur utama untuk perpustakaan Java inti Google) yang menunjukkan keindahan Google Collections. Satu hal yang dilakukan Google, yang saya yakini brilian, adalah jaminan Immutability dalam koleksi.
sumber
Google Guava adalah perpustakaan utilitas, jadi saya ragu ada kelas pembunuh di dalamnya. Seluruh hal tentang utilitas adalah Anda hampir menggunakannya dalam setiap proyek yang Anda miliki. Saya tidak ingat proyek apa pun yang saya lakukan yang tidak menggunakan koleksi Java. Dan kebenarannya adalah, koleksi utilitas Google Guava luar biasa dan harus berada di Java SDK itu sendiri.
Saya telah menulis tiga artikel tentang kelas di Google Guava:
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ListenableFuture
: http://blog.firdau.si/2010/07/05/guava-using-listenablefuture/ComputingMap
di Google Collection (sekarang Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/Dan ini belum semuanya, ada banyak hal lain yang bisa Anda lakukan dengan Jambu Biji.
sumber
Benar-benar sangat bermanfaat. Hampir selalu perpustakaan pertama ditambahkan ke proyek baru.
Secara keseluruhan, kualitas perpustakaan sangat tinggi. API dipikirkan dengan baik, implementasi yang solid. Sangat dianjurkan.
sumber
MapMaker sekarang menawarkan cache LRU terbatas - itu adalah beberapa mesin substansial yang tersembunyi di balik API kecil. Ini memiliki potensi utilitas yang sangat besar, dan saya masih menggunakan kode.
sumber