Guía de la mesa de guayaba

1. Información general

En este tutorial, mostraremos cómo usar la interfaz Table de Google Guava y sus múltiples implementaciones.

Guava's Table es una colección que representa una estructura similar a una tabla que contiene filas, columnas y los valores de celda asociados. La fila y la columna actúan como un par ordenado de claves.

2. Tabla de Google Guava

Echemos un vistazo a cómo usar la clase Table .

2.1. Dependencia de Maven

Comencemos agregando la dependencia de la biblioteca Guava de Google en el pom.xml :

 com.google.guava guava 29.0-jre 

La última versión de la dependencia se puede consultar aquí.

2.2. Acerca de

Si tuviéramos que representar la Tabla de Guava usando Colecciones presentes en el núcleo de Java, entonces la estructura sería un mapa de filas donde cada fila contiene un mapa de columnas con valores de celda asociados.

La tabla representa un mapa especial donde se pueden especificar dos claves de forma combinada para hacer referencia a un solo valor.

Es similar a crear un mapa de mapas, por ejemplo, Mapa . Table sería también una forma perfecta de representar el tablero de juego Battleships.

3. Creando

Puede crear una instancia de Table de varias formas:

  • Usando el método de creación de la clase HashBasedTable que usa LinkedHashMap internamente:
    Table universityCourseSeatTable = HashBasedTable.create();
  • Si necesitamos una tabla cuyas claves de fila y las claves de columna deben ordenarse por su orden natural o proporcionando comparadores, puede crear una instancia de una tabla usando el método de creación de una clase llamada TreeBasedTable , que usa TreeMap internamente:
    Table universityCourseSeatTable = TreeBasedTable.create(); 
  • Si conocemos las claves de fila y de columna de antemano y el tamaño de la tabla es fijo, use el método de creación de la clase ArrayTable :
    List universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables); 
  • Si tenemos la intención de crear una instancia inmutable de Table cuyos datos internos nunca van a cambiar, use la clase ImmutableTable (creando que sigue un patrón de construcción):
    Table universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build(); 

4. Usando

Comencemos con un ejemplo simple que muestra el uso de Table .

4.1. Recuperación

Si conocemos la clave de fila y la clave de columna, entonces podemos obtener el valor asociado con la clave de fila y columna:

@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. Comprobación de una entrada

Podemos comprobar la presencia de una entrada en una Tabla en función de:

  • Clave de fila
  • Clave de columna
  • Tanto la clave de fila como la clave de columna
  • Valor

Veamos cómo verificar la presencia de una entrada:

@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. Eliminación

Podemos eliminar una entrada de la Tabla proporcionando tanto la clave de fila como la clave de columna:

@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. Clave de fila a mapa de valor de celda

Podemos obtener una representación de mapa con la clave como una fila y el valor como CellValue proporcionando la clave de la columna:

@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. Representación cartográfica de una tabla

Podemos conseguir un mapa representación mediante el método 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. Clave de columna al mapa de valor de celda

Podemos obtener una representación de mapa con la clave como columna y el valor como CellValue proporcionando la clave de fila:

@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. Obtener clave de fila distinta

Podemos obtener todas las claves de fila de una tabla usando el método 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. Obtenga una clave de columna distinta

Podemos obtener todas las claves de columna de una tabla usando el método 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. Conclusión

En este tutorial, ilustramos los métodos de la clase Table de la biblioteca Guava. La clase Table proporciona una colección que representa una estructura similar a una tabla que contiene filas, columnas y valores de celda asociados.

El código que pertenece a los ejemplos anteriores se puede encontrar en el proyecto GitHub; este es un proyecto basado en Maven, por lo que debería ser fácil de importar y ejecutar como está.