Jambu biji - Maps

1. Ikhtisar

Dalam tutorial ini kami akan mengilustrasikan cara paling berguna untuk memanfaatkan Guava untuk bekerja dengan Java Maps .

Mari kita mulai dengan sangat sederhana dan membuat HashMap tanpa operator baru , menggunakan Jambu Biji:

Map aNewMap = Maps.newHashMap();

2. ImmutableMap

Selanjutnya - mari kita lihat cara membuat ImmutableMap menggunakan Guava :

@Test public void whenCreatingImmutableMap_thenCorrect() { Map salary = ImmutableMap. builder() .put("John", 1000) .put("Jane", 1500) .put("Adam", 2000) .put("Tom", 2000) .build(); assertEquals(1000, salary.get("John").intValue()); assertEquals(2000, salary.get("Tom").intValue()); }

3. SortedMap

Sekarang - mari kita lihat cara membuat dan bekerja dengan SortedMap .

Dalam contoh berikut - kami membuat peta yang diurutkan menggunakan pembuat Guava yang sesuai:

@Test public void whenUsingSortedMap_thenKeysAreSorted() { ImmutableSortedMap salary = new ImmutableSortedMap .Builder(Ordering.natural()) .put("John", 1000) .put("Jane", 1500) .put("Adam", 2000) .put("Tom", 2000) .build(); assertEquals("Adam", salary.firstKey()); assertEquals(2000, salary.lastEntry().getValue().intValue()); }

4. BiMap

Selanjutnya - mari kita bahas bagaimana menggunakan BiMap . Kita dapat menggunakan BiMap untuk memetakan kunci kembali ke nilai karena ini memastikan nilainya unik.

Dalam contoh berikut - kami membuat BiMap dan kami mendapatkan inversenya () :

@Test public void whenCreateBiMap_thenCreated() { BiMap words = HashBiMap.create(); words.put("First", 1); words.put("Second", 2); words.put("Third", 3); assertEquals(2, words.get("Second").intValue()); assertEquals("Third", words.inverse().get(3)); }

5. Multimap

Sekarang - mari kita lihat Multimap .

Kita dapat menggunakan Multimap untuk mengaitkan setiap kunci dengan beberapa nilai seperti pada contoh berikut:

@Test public void whenCreateMultimap_thenCreated() { Multimap multimap = ArrayListMultimap.create(); multimap.put("fruit", "apple"); multimap.put("fruit", "banana"); multimap.put("pet", "cat"); multimap.put("pet", "dog"); assertThat(multimap.get("fruit"), containsInAnyOrder("apple", "banana")); assertThat(multimap.get("pet"), containsInAnyOrder("cat", "dog")); }

5. Tabel

Sekarang mari kita lihat Tabel Jambu Biji ; kita menggunakan Tabel jika kita membutuhkan lebih dari satu kunci untuk mengindeks sebuah nilai .

Dalam contoh berikut - kita akan menggunakan tabel untuk menyimpan jarak antar kota:

@Test public void whenCreatingTable_thenCorrect() { Table distance = HashBasedTable.create(); distance.put("London", "Paris", 340); distance.put("New York", "Los Angeles", 3940); distance.put("London", "New York", 5576); assertEquals(3940, distance.get("New York", "Los Angeles").intValue()); assertThat(distance.columnKeySet(), containsInAnyOrder("Paris", "New York", "Los Angeles")); assertThat(distance.rowKeySet(), containsInAnyOrder("London", "New York")); }

Kita juga bisa menggunakan Tables.transpose () untuk membalik tombol baris dan kolom seperti pada contoh berikut:

@Test public void whenTransposingTable_thenCorrect() { Table distance = HashBasedTable.create(); distance.put("London", "Paris", 340); distance.put("New York", "Los Angeles", 3940); distance.put("London", "New York", 5576); Table transposed = Tables.transpose(distance); assertThat(transposed.rowKeySet(), containsInAnyOrder("Paris", "New York", "Los Angeles")); assertThat(transposed.columnKeySet(), containsInAnyOrder("London", "New York")); }

6. ClassToInstanceMap

Berikutnya - Mari kita lihat ClassToInstanceMap . Kita dapat menggunakan ClassToInstanceMap jika kita ingin kelas objek menjadi kunci seperti pada contoh berikut:

@Test public void whenCreatingClassToInstanceMap_thenCorrect() { ClassToInstanceMap numbers = MutableClassToInstanceMap.create(); numbers.putInstance(Integer.class, 1); numbers.putInstance(Double.class, 1.5); assertEquals(1, numbers.get(Integer.class)); assertEquals(1.5, numbers.get(Double.class)); }

7. Daftar Grup Menggunakan Multimap

Selanjutnya - mari kita lihat bagaimana mengelompokkan List menggunakan Multimap . Dalam contoh berikut - kami mengelompokkan Daftar nama berdasarkan panjangnya menggunakan Multimaps.index () :

@Test public void whenGroupingListsUsingMultimap_thenGrouped() { List names = Lists.newArrayList("John", "Adam", "Tom"); Function func = new Function(){ public Integer apply(String input) { return input.length(); } }; Multimap groups = Multimaps.index(names, func); assertThat(groups.get(3), containsInAnyOrder("Tom")); assertThat(groups.get(4), containsInAnyOrder("John", "Adam")); }

8. Kesimpulan

Dalam tutorial singkat ini kita membahas kasus penggunaan yang paling umum dan berguna untuk bekerja dengan Maps menggunakan pustaka Guava .

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di proyek Guava GitHub saya - ini adalah proyek berbasis Eclipse, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.