Руководство по таблице гуавы

Руководство по таблице гуавы

1. обзор

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

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

2. Table в Google Guava

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

2.1. Maven Dependency

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


    com.google.guava
    guava
    21.0

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

2.2. Около

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

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

Это похоже на создание карты карт, напримерMap<UniversityName, Map<CoursesOffered, SeatAvailable>>. Table также был бы прекрасным способом представления игрового поля «Морской бой».

3. Создание

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

  • Используя методcreate из классаHashBasedTable, который внутренне используетLinkedHashMap:

    Table universityCourseSeatTable
      = HashBasedTable.create();
  • Если нам нуженTable, ключи строк и ключи столбцов которого должны быть упорядочены по их естественному порядку или путем предоставления компараторов, вы можете создать экземплярTable, используя методcreate из класс с именемTreeBasedTable, который внутренне используетTreeMap:

    Table universityCourseSeatTable
      = TreeBasedTable.create();
  • Если мы заранее знаем ключи строки и ключи столбца и размер таблицы фиксирован, используйте методcreate из классаArrayTable:

    List universityRowTable
      = Lists.newArrayList("Mumbai", "Harvard");
    List courseColumnTables
      = Lists.newArrayList("Chemical", "IT", "Electrical");
    Table universityCourseSeatTable
      = ArrayTable.create(universityRowTable, courseColumnTables);
  • Если мы намерены создать неизменяемый экземплярTable, чьи внутренние данные никогда не изменятся, используйте классImmutableTable (создание которого следует шаблону построителя):

    Table universityCourseSeatTable
      = ImmutableTable. builder()
      .put("Mumbai", "Chemical", 120).build();

4. С помощью

Начнем с простого примера, показывающего использованиеTable.

4.1. поиск

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

@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. Проверка на въезд

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

  • Ключ строки

  • Ключ столбца

  • Ключ строки и ключ столбца

  • Значение

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

@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. Удаление

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

@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. Ключ строки к карте значений ячейки

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

@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. Отображение картыTable

Мы можем получить представлениеMap<UniversityName, Map<CoursesOffered, SeatAvailable>>, используя метод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. Ключ столбца к карте значений ячейки

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

@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. Получить отчетливый ключ строки

Мы можем получить все ключи строк из таблицы с помощью метода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. Получить отчетливый ключ столбца

Мы можем получить все ключи столбцов из таблицы, используя метод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. Заключение

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

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