Ръководство за таблица Гуава

1. Общ преглед

В този урок ще покажем как да използваме интерфейса на Google Guava's Table и многобройните му внедрения.

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

2. Таблица на Google Guava

Нека да разгледаме как да използваме класа Table .

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

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

 com.google.guava guava 29.0-jre 

Най-новата версия на зависимостта може да бъде проверена тук.

2.2. относно

Ако трябва да представим таблицата на Guava, като използваме Колекции, присъстващи в основната Java, тогава структурата ще бъде карта на редове, където всеки ред съдържа карта на колони със свързани стойности на клетки.

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

Подобно е на създаването на карта от карти, например Map . Масата също би била идеален начин за представяне на дъската за игра на Battleships.

3. Създаване

Можете да създадете екземпляр на Таблица по няколко начина:

  • Използвайки метода за създаване от класа HashBasedTable, който използва LinkedHashMap вътрешно:
    Table universityCourseSeatTable = HashBasedTable.create();
  • Ако се нуждаем от таблица, чиито ключове на редове и ключове на колони трябва да бъдат подредени чрез естественото им подреждане или чрез предоставяне на компаратори, можете да създадете екземпляр на таблица, използвайки метода 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. Използване

Нека започнем с прост пример, показващ използването на Таблица .

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. Проверка за влизане

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

  • Ред ключ
  • Ключ на колона
  • Както ключ за ред, така и ключ за колона
  • Стойност

Нека да видим как да проверим за наличие на запис:

@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. Премахване

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

@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. Представяне на карта на таблица

Можем да вземем карта представяне чрез използване на метода 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 предоставя колекция, която представлява структура като таблица, съдържаща редове, колони и свързани стойности на клетки.

Кодът, принадлежащ на горните примери, може да бъде намерен в проекта GitHub - това е проект, базиран на Maven, така че трябва да е лесно да се импортира и да се изпълнява както е.