Guida alla tabella Guava

1. Panoramica

In questo tutorial, mostreremo come utilizzare l' interfaccia Table di Google Guava e le sue molteplici implementazioni.

La tabella di Guava è una raccolta che rappresenta una struttura simile a una tabella contenente righe, colonne e i valori delle celle associate. La riga e la colonna agiscono come una coppia ordinata di chiavi.

2. Google Guava's Table

Diamo un'occhiata a come utilizzare la classe Table .

2.1. Dipendenza da Maven

Iniziamo aggiungendo la dipendenza della libreria Guava di Google nel pom.xml :

 com.google.guava guava 29.0-jre 

L'ultima versione della dipendenza può essere verificata qui.

2.2. Di

Se dovessimo rappresentare la tabella di Guava utilizzando le raccolte presenti nel core Java, la struttura sarebbe una mappa di righe in cui ogni riga contiene una mappa di colonne con valori di cella associati.

La tabella rappresenta una mappa speciale in cui è possibile specificare due chiavi in ​​modo combinato per fare riferimento a un singolo valore.

È simile alla creazione di una mappa di mappe, ad esempio Mappa . Il tavolo sarebbe anche un modo perfetto per rappresentare il tabellone di gioco di Battleships.

3. Creazione

Puoi creare un'istanza di Table in diversi modi:

  • Utilizzando il metodo create dalla classe HashBasedTable che utilizza internamente LinkedHashMap :
    Table universityCourseSeatTable = HashBasedTable.create();
  • Se abbiamo bisogno di una tabella le cui chiavi di riga e le chiavi di colonna devono essere ordinate in base al loro ordinamento naturale o fornendo comparatori, è possibile creare un'istanza di una tabella utilizzando il metodo create da una classe chiamata TreeBasedTable , che utilizza TreeMap internamente:
    Table universityCourseSeatTable = TreeBasedTable.create(); 
  • Se conosciamo in anticipo le chiavi di riga e di colonna e la dimensione della tabella è fissa, utilizzare il metodo create dalla classe ArrayTable :
    List universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables); 
  • Se intendiamo creare un'istanza immutabile di Table i cui dati interni non cambieranno mai, usa la classe ImmutableTable (creando che segue uno schema builder):
    Table universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build(); 

4. Utilizzando

Cominciamo con un semplice esempio che mostra l'utilizzo di Table .

4.1. Recupero

Se conosciamo la chiave di riga e la chiave di colonna, possiamo ottenere il valore associato alla riga e alla chiave di colonna:

@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. Controllo di una voce

Possiamo verificare la presenza di una voce in una tabella in base a:

  • Tasto riga
  • Chiave della colonna
  • Sia la chiave di riga che la chiave di colonna
  • Valore

Vediamo come verificare la presenza di una voce:

@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. Rimozione

Possiamo rimuovere una voce dalla tabella fornendo sia la chiave di riga che la chiave di colonna:

@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. Chiave riga per mappa valore cella

Possiamo ottenere una rappresentazione della mappa con la chiave come riga e il valore come CellValue fornendo la chiave della colonna:

@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. Rappresentazione su mappa di una tabella

We can get a Map representation by using the columnMap method:

@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. Column Key to Cell Value Map

We can get a Map representation with the key as a column and the value as a CellValue by providing row key:

@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. Get Distinct Row Key

We can get all the row keys from a table using the rowKeySet method:

@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. Get Distinct Column Key

We can get all column keys from a table using the columnKeySet method:

@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. Conclusion

In this tutorial, we illustrated the methods of the Table class from the Guava library. The Table class provides a collection that represents a table like structure containing rows, columns and associated cell values.

Il codice appartenente agli esempi precedenti può essere trovato nel progetto GitHub: questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.