Перейти к основному содержимому

Путеводитель по таблице гуавы

· 5 мин. чтения

1. Обзор

В этом руководстве мы покажем, как использовать интерфейс таблицы Google Guava и его многочисленные реализации.

Таблица Guava — это коллекция, которая представляет собой таблицу, содержащую строки, столбцы и связанные значения ячеек. Строка и столбец действуют как упорядоченная пара ключей.

2. Таблица Гуавы Google ``

Давайте посмотрим, как использовать класс Table .

2.1. Зависимость от Maven

Начнем с добавления зависимости библиотеки Google Guava в pom.xml :

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

Последнюю версию зависимости можно проверить здесь .

2.2. О

Если бы мы должны были представить таблицу Guava с использованием коллекций , присутствующих в ядре Java, то структура была бы картой строк, где каждая строка содержит карту столбцов со связанными значениями ячеек.

Таблица представляет собой специальную карту, в которой два ключа могут быть указаны в комбинированном виде для ссылки на одно значение.

Это похоже на создание карты карт, например, Map<UniversityName, Map<CoursesOffered, SeatAvailable>> . Стол также был бы идеальным способом представления игрового поля Battleships.

3. Создание

Вы можете создать экземпляр таблицы несколькими способами:

  • Используя метод create из класса HashBasedTable , который внутренне использует LinkedHashMap :
Table<String, String, Integer> universityCourseSeatTable 
= HashBasedTable.create();
  • Если нам нужна таблица , чьи ключи строк и ключи столбцов должны быть упорядочены в соответствии с их естественным порядком или путем предоставления компараторов, вы можете создать экземпляр таблицы , используя метод create из класса с именем TreeBasedTable , который использует TreeMap внутри:
Table<String, String, Integer> universityCourseSeatTable
= TreeBasedTable.create();
  • Если мы заранее знаем ключи строки и ключи столбца и размер таблицы фиксирован, используем метод create из класса ArrayTable :
List<String> universityRowTable 
= Lists.newArrayList("Mumbai", "Harvard");
List<String> courseColumnTables
= Lists.newArrayList("Chemical", "IT", "Electrical");
Table<String, String, Integer> universityCourseSeatTable
= ArrayTable.create(universityRowTable, courseColumnTables);
  • Если мы намерены создать неизменяемый экземпляр таблицы , внутренние данные которой никогда не изменятся, используйте класс ImmutableTable (создание которого следует шаблону компоновщика):
Table<String, String, Integer> universityCourseSeatTable
= ImmutableTable.<String, String, Integer> builder()
.put("Mumbai", "Chemical", 120).build();

4. Использование

Давайте начнем с простого примера, показывающего использование таблицы .

4.1. Retrieval

Если мы знаем ключ строки и ключ столбца, мы можем получить значение, связанное с ключом строки и столбца:

@Test
public void givenTable_whenGet_returnsSuccessfully() {
Table<String, String, Integer> 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. Проверка записи

Мы можем проверить наличие записи в таблице на основе:

  • Ключ строки
  • Ключ столбца
  • И ключ строки, и ключ столбца
  • Ценность

Давайте посмотрим, как проверить наличие записи:

@Test
public void givenTable_whenContains_returnsSuccessfully() {
Table<String, String, Integer> 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. Удаление

Мы можем удалить запись из таблицы , указав как ключ строки, так и ключ столбца:

@Test
public void givenTable_whenRemove_returnsSuccessfully() {
Table<String, String, Integer> 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. Ключ строки к карте значения ячейки

Мы можем получить представление Map с ключом в виде строки и значением в виде CellValue , указав ключ столбца:

@Test
public void givenTable_whenColumn_returnsSuccessfully() {
Table<String, String, Integer> universityCourseSeatTable
= HashBasedTable.create();
universityCourseSeatTable.put("Mumbai", "Chemical", 120);
universityCourseSeatTable.put("Mumbai", "IT", 60);
universityCourseSeatTable.put("Harvard", "Electrical", 60);
universityCourseSeatTable.put("Harvard", "IT", 120);

Map<String, Integer> universitySeatMap
= universityCourseSeatTable.column("IT");

assertThat(universitySeatMap).hasSize(2);
assertThat(universitySeatMap.get("Mumbai")).isEqualTo(60);
assertThat(universitySeatMap.get("Harvard")).isEqualTo(120);
}

4.5. Картографическое представление таблицы

Мы можем получить представление Map<UniversityName, Map<CoursesOffered, SeatAvailable>> , используя метод columnMap :

@Test
public void givenTable_whenColumnMap_returnsSuccessfully() {
Table<String, String, Integer> universityCourseSeatTable
= HashBasedTable.create();
universityCourseSeatTable.put("Mumbai", "Chemical", 120);
universityCourseSeatTable.put("Mumbai", "IT", 60);
universityCourseSeatTable.put("Harvard", "Electrical", 60);
universityCourseSeatTable.put("Harvard", "IT", 120);

Map<String, Map<String, Integer>> 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. Ключ столбца к карте значения ячейки

Мы можем получить представление Map с ключом в виде столбца и значением в виде CellValue , указав ключ строки:

@Test
public void givenTable_whenRow_returnsSuccessfully() {
Table<String, String, Integer> universityCourseSeatTable
= HashBasedTable.create();
universityCourseSeatTable.put("Mumbai", "Chemical", 120);
universityCourseSeatTable.put("Mumbai", "IT", 60);
universityCourseSeatTable.put("Harvard", "Electrical", 60);
universityCourseSeatTable.put("Harvard", "IT", 120);

Map<String, Integer> courseSeatMap
= universityCourseSeatTable.row("Mumbai");

assertThat(courseSeatMap).hasSize(2);
assertThat(courseSeatMap.get("IT")).isEqualTo(60);
assertThat(courseSeatMap.get("Chemical")).isEqualTo(120);
}

4.7. Получить отдельный ключ строки

Мы можем получить все ключи строки из таблицы, используя метод rowKeySet :

@Test
public void givenTable_whenRowKeySet_returnsSuccessfully() {
Table<String, String, Integer> universityCourseSeatTable
= HashBasedTable.create();
universityCourseSeatTable.put("Mumbai", "Chemical", 120);
universityCourseSeatTable.put("Mumbai", "IT", 60);
universityCourseSeatTable.put("Harvard", "Electrical", 60);
universityCourseSeatTable.put("Harvard", "IT", 120);

Set<String> universitySet = universityCourseSeatTable.rowKeySet();

assertThat(universitySet).hasSize(2);
}

4.8. Получить отдельный ключ столбца

Мы можем получить все ключи столбцов из таблицы, используя метод columnKeySet :

@Test
public void givenTable_whenColKeySet_returnsSuccessfully() {
Table<String, String, Integer> universityCourseSeatTable
= HashBasedTable.create();
universityCourseSeatTable.put("Mumbai", "Chemical", 120);
universityCourseSeatTable.put("Mumbai", "IT", 60);
universityCourseSeatTable.put("Harvard", "Electrical", 60);
universityCourseSeatTable.put("Harvard", "IT", 120);

Set<String> courseSet = universityCourseSeatTable.columnKeySet();

assertThat(courseSet).hasSize(3);
}

5. Вывод

В этом уроке мы проиллюстрировали методы класса Table из библиотеки Guava. Класс Table предоставляет коллекцию, представляющую структуру, подобную таблице, содержащую строки, столбцы и связанные значения ячеек.

Код, относящийся к приведенным выше примерам, можно найти в проекте GitHub — это проект на основе Maven, поэтому его легко импортировать и запускать как есть.