Panduan untuk Tabel Jambu Biji

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan cara menggunakan antarmuka Tabel Google Guava dan beberapa implementasinya.

Tabel Jambu adalah kumpulan yang mewakili tabel seperti struktur yang berisi baris, kolom, dan nilai sel terkait. Baris dan kolom bertindak sebagai pasangan kunci yang berurutan.

2. Tabel Jambu Google

Mari kita lihat cara menggunakan kelas Tabel .

2.1. Ketergantungan Maven

Mari kita mulai dengan menambahkan dependensi pustaka Guava Google di pom.xml :

 com.google.guava guava 29.0-jre 

Versi terbaru dari ketergantungan tersebut dapat diperiksa di sini.

2.2. Tentang

Jika kita merepresentasikan Tabel Jambu Biji menggunakan Koleksi yang ada di inti Java, maka strukturnya akan menjadi peta baris di mana setiap baris berisi peta kolom dengan nilai sel terkait.

Tabel mewakili peta khusus di mana dua kunci dapat ditentukan secara gabungan untuk merujuk ke satu nilai.

Ini mirip dengan membuat peta peta, misalnya, Peta . Tabel juga akan menjadi cara sempurna untuk merepresentasikan papan permainan Battleships.

3. Membuat

Anda dapat membuat instance Tabel dengan berbagai cara:

  • Menggunakan metode create dari kelas HashBasedTable yang menggunakan LinkedHashMap secara internal:
    Table universityCourseSeatTable = HashBasedTable.create();
  • Jika kita membutuhkan Tabel yang kunci baris dan kunci kolomnya perlu diurutkan berdasarkan pengurutan aslinya atau dengan menyediakan komparator, Anda dapat membuat instance Tabel menggunakan metode create dari kelas yang disebut TreeBasedTable , yang menggunakan TreeMap secara internal:
    Table universityCourseSeatTable = TreeBasedTable.create(); 
  • Jika kita mengetahui kunci baris dan tombol kolom sebelumnya dan ukuran tabel sudah tetap, gunakan metode create dari kelas ArrayTable :
    List universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables); 
  • Jika kita bermaksud membuat instance Tabel yang tidak dapat diubah yang data internalnya tidak akan pernah berubah, gunakan kelas ImmutableTable (pembuatan yang mengikuti pola pembuat):
    Table universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build(); 

4. Menggunakan

Mari kita mulai dengan contoh sederhana yang menunjukkan penggunaan Tabel .

4.1. Pengambilan

Jika kita mengetahui kunci baris dan kunci kolom maka kita bisa mendapatkan nilai yang terkait dengan baris dan kunci kolom:

@Test public void givenTable_whenGet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); int seatCount = universityCourseSeatTable.get("Mumbai", "IT"); Integer seatCountForNoEntry = universityCourseSeatTable.get("Oxford", "IT"); assertThat(seatCount).isEqualTo(60); assertThat(seatCountForNoEntry).isEqualTo(null); }

4.2. Memeriksa Entri

Kami dapat memeriksa keberadaan entri dalam Tabel berdasarkan:

  • Kunci baris
  • Kunci kolom
  • Baik kunci baris maupun kunci kolom
  • Nilai

Mari kita lihat cara memeriksa keberadaan entri:

@Test public void givenTable_whenContains_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); boolean entryIsPresent = universityCourseSeatTable.contains("Mumbai", "IT"); boolean courseIsPresent = universityCourseSeatTable.containsColumn("IT"); boolean universityIsPresent = universityCourseSeatTable.containsRow("Mumbai"); boolean seatCountIsPresent = universityCourseSeatTable.containsValue(60); assertThat(entryIsPresent).isEqualTo(true); assertThat(courseIsPresent).isEqualTo(true); assertThat(universityIsPresent).isEqualTo(true); assertThat(seatCountIsPresent).isEqualTo(true); }

4.3. Pemindahan

Kita dapat menghapus entri dari Tabel dengan menyediakan kunci baris dan kunci kolom:

@Test public void givenTable_whenRemove_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); int seatCount = universityCourseSeatTable.remove("Mumbai", "IT"); assertThat(seatCount).isEqualTo(60); assertThat(universityCourseSeatTable.remove("Mumbai", "IT")). isEqualTo(null); } 

4.4. Kunci Baris ke Peta Nilai Sel

Kita bisa mendapatkan representasi Peta dengan kunci sebagai baris dan nilai sebagai CellValue dengan memberikan kunci kolom:

@Test public void givenTable_whenColumn_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map universitySeatMap = universityCourseSeatTable.column("IT"); assertThat(universitySeatMap).hasSize(2); assertThat(universitySeatMap.get("Mumbai")).isEqualTo(60); assertThat(universitySeatMap.get("Harvard")).isEqualTo(120); } 

4.5. Representasi Peta dari Tabel

Kita bisa mendapatkan Peta representasi dengan menggunakan metode columnMap :

@Test public void givenTable_whenColumnMap_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map
    
      courseKeyUniversitySeatMap = universityCourseSeatTable.columnMap(); assertThat(courseKeyUniversitySeatMap).hasSize(3); assertThat(courseKeyUniversitySeatMap.get("IT")).hasSize(2); assertThat(courseKeyUniversitySeatMap.get("Electrical")).hasSize(1); assertThat(courseKeyUniversitySeatMap.get("Chemical")).hasSize(1); } 
    

4.6. Kunci Kolom ke Peta Nilai Sel

Kita bisa mendapatkan representasi Peta dengan kunci sebagai kolom dan nilai sebagai CellValue dengan memberikan kunci baris:

@Test public void givenTable_whenRow_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Map courseSeatMap = universityCourseSeatTable.row("Mumbai"); assertThat(courseSeatMap).hasSize(2); assertThat(courseSeatMap.get("IT")).isEqualTo(60); assertThat(courseSeatMap.get("Chemical")).isEqualTo(120); } 

4.7. Dapatkan Kunci Baris Berbeda

Kita bisa mendapatkan semua kunci baris dari tabel menggunakan metode rowKeySet :

@Test public void givenTable_whenRowKeySet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Set universitySet = universityCourseSeatTable.rowKeySet(); assertThat(universitySet).hasSize(2); } 

4.8. Dapatkan Kunci Kolom Berbeda

Kita bisa mendapatkan semua kunci kolom dari tabel menggunakan metode columnKeySet :

@Test public void givenTable_whenColKeySet_returnsSuccessfully() { Table universityCourseSeatTable = HashBasedTable.create(); universityCourseSeatTable.put("Mumbai", "Chemical", 120); universityCourseSeatTable.put("Mumbai", "IT", 60); universityCourseSeatTable.put("Harvard", "Electrical", 60); universityCourseSeatTable.put("Harvard", "IT", 120); Set courseSet = universityCourseSeatTable.columnKeySet(); assertThat(courseSet).hasSize(3); } 

5. Kesimpulan

Dalam tutorial ini, kami mengilustrasikan metode kelas Tabel dari perpustakaan Guava. Kelas Tabel menyediakan koleksi yang mewakili tabel seperti struktur yang berisi baris, kolom, dan nilai sel terkait.

Kode yang termasuk dalam contoh di atas dapat ditemukan di proyek GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.