1. Gambaran keseluruhan
Dalam tutorial ini, kami akan menunjukkan cara menggunakan antara muka Jadual Jambu Batu Google dan pelbagai pelaksanaannya.
Jambu batu ini Jadual adalah koleksi yang mewakili meja seperti struktur yang mengandungi baris, lajur dan nilai sel yang berkaitan. Baris dan lajur bertindak sebagai sepasang kekunci yang disusun.
2. Jadual Jambu Batu Google
Mari kita lihat cara menggunakan kelas Table .
2.1. Ketergantungan Maven
Mari mulakan dengan menambahkan kebergantungan perpustakaan Jambu biji Google di pom.xml :
com.google.guava guava 29.0-jre
Versi ketergantungan terkini boleh diperiksa di sini.
2.2. Mengenai
Sekiranya kita mewakili Jadual Jambu Batu menggunakan Koleksi yang ada di inti Java, maka strukturnya akan menjadi peta baris di mana setiap baris berisi peta lajur dengan nilai sel yang terkait.
Jadual mewakili peta khas di mana dua kunci dapat ditentukan secara gabungan untuk merujuk kepada satu nilai.
Ini serupa dengan membuat peta peta, misalnya, Peta
3. Membuat
Anda boleh membuat contoh Jadual dengan pelbagai cara:
- Menggunakan kaedah buat dari kelas HashBasedTable yang menggunakan LinkedHashMap secara dalaman:
Table universityCourseSeatTable = HashBasedTable.create();
- Sekiranya kita memerlukan Jadual yang kekunci baris dan kekunci lajur perlu disusun mengikut susunan semula jadi atau dengan membekalkan pembanding, anda boleh membuat contoh Jadual menggunakan kaedah buat dari kelas yang disebut TreeBasedTable , yang menggunakan TreeMap secara dalaman:
Table universityCourseSeatTable = TreeBasedTable.create();
- Sekiranya kita mengetahui kekunci baris dan kekunci lajur terlebih dahulu dan ukuran jadualnya tetap, gunakan kaedah buat dari kelas ArrayTable :
List universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables);
- Sekiranya kita berhasrat untuk membuat contoh Jadual yang tidak berubah yang data dalamannya tidak akan pernah berubah, gunakan kelas ImmutableTable (membuat yang mengikuti corak pembangun):
Table universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build();
4. Menggunakan
Mari kita mulakan dengan contoh ringkas yang menunjukkan penggunaan Jadual .
4.1. Pengambilan
Sekiranya kita mengetahui kekunci baris dan kekunci lajur maka kita dapat memperoleh nilai yang berkaitan dengan baris dan kekunci lajur:
@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 Penyertaan
Kami dapat memeriksa kehadiran entri dalam Jadual berdasarkan:
- Kekunci baris
- Kekunci lajur
- Kekunci baris dan kekunci lajur
- Nilai
Mari lihat bagaimana memeriksa kehadiran 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. Penyingkiran
Kita boleh membuang entri dari Jadual dengan memberikan kunci baris dan kekunci lajur:
@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 untuk Peta Nilai Sel
Kita boleh mendapatkan perwakilan Peta dengan kunci sebagai baris dan nilai sebagai Nilai Sel dengan memberikan kunci lajur:
@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. Perwakilan Peta Jadual
Kita boleh mendapatkan Peta
@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 Lajur untuk Peta Nilai Sel
Kita boleh mendapatkan perwakilan Peta dengan kunci sebagai lajur dan nilai sebagai Nilai Sel 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 Kekunci Baris Berbeza
Kita boleh mendapatkan semua kekunci baris dari jadual menggunakan kaedah 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 Kekunci Lajur Berbeza
Kita boleh mendapatkan semua kekunci lajur dari jadual menggunakan kaedah 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 menggambarkan kaedah kelas Table dari perpustakaan Jambu. The Table kelas menyediakan koleksi yang mewakili meja seperti struktur yang mengandungi baris, lajur dan nilai sel yang berkaitan.
Kod yang termasuk dalam contoh di atas boleh didapati dalam projek GitHub - ini adalah projek yang berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.