Führer zur Guave-Tabelle
1. Überblick
In diesem Tutorial zeigen wir Ihnen, wie Sie dieTable-Schnittstelle von Google Guava und ihre zahlreichen Implementierungen verwenden.
GuavasTable ist eine Sammlung, die eine tabellenartige Struktur darstellt, die Zeilen, Spalten und die zugehörigen Zellenwerte enthält. Die Zeile und die Spalte fungieren als geordnetes Schlüsselpaar.
2. Tablevon Google Guava
Schauen wir uns an, wie die KlasseTableverwendet wird.
2.1. Maven-Abhängigkeit
Beginnen wir mit dem Hinzufügen der Google-Abhängigkeit von der Guava-Bibliothek inpom.xml:
com.google.guava
guava
21.0
Die neueste Version der Abhängigkeit kann inhere überprüft werden.
2.2. Über
Wenn wir GuavasTable mitCollections darstellen würden, die in Kern-Java vorhanden sind, wäre die Struktur eine Karte von Zeilen, wobei jede Zeile eine Karte von Spalten mit zugehörigen Zellenwerten enthält.
Table stellt eine spezielle Zuordnung dar, bei der zwei Schlüssel kombiniert angegeben werden können, um auf einen einzelnen Wert zu verweisen.
Es ähnelt dem Erstellen einer Karte mit Karten, z. B.Map<UniversityName, Map<CoursesOffered, SeatAvailable>>. Table wäre auch eine perfekte Möglichkeit, das Schlachtschiff-Spielbrett darzustellen.
3. Erstellen
Sie können eine Instanz vonTable auf verschiedene Arten erstellen:
-
Verwenden dercreate-Methode aus der KlasseHashBasedTable, die internLinkedHashMap verwendet:
Table
universityCourseSeatTable = HashBasedTable.create(); -
Wenn wir einTablebenötigen, dessen Zeilen- und Spaltenschlüssel nach ihrer natürlichen Reihenfolge oder durch Angabe von Komparatoren geordnet werden müssen, können Sie eine Instanz vonTable mit der Methodecreate von erstellen eine Klasse namensTreeBasedTable, die internTreeMap verwendet:
Table
universityCourseSeatTable = TreeBasedTable.create(); -
Wenn wir die Zeilen- und Spaltenschlüssel vorher kennen und die Tabellengröße festgelegt ist, verwenden Sie die Methodecreate aus der KlasseArrayTable:
List
universityRowTable = Lists.newArrayList("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList("Chemical", "IT", "Electrical"); Table universityCourseSeatTable = ArrayTable.create(universityRowTable, courseColumnTables); -
Wenn Sie eine unveränderliche Instanz vonTable erstellen möchten, deren interne Daten sich niemals ändern werden, verwenden Sie die KlasseImmutableTable (Erstellen nach einem Builder-Muster):
Table
universityCourseSeatTable = ImmutableTable. builder() .put("Mumbai", "Chemical", 120).build();
4. Verwenden von
Beginnen wir mit einem einfachen Beispiel, das die Verwendung vonTable zeigt.
4.1. Abruf
Wenn wir den Zeilenschlüssel und den Spaltenschlüssel kennen, können wir den Wert abrufen, der dem Zeilen- und dem Spaltenschlüssel zugeordnet ist:
@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. Nach einem Eintrag suchen
Wir können das Vorhandensein eines Eintrags inTable anhand folgender Kriterien überprüfen:
-
Zeilentaste
-
Spaltenschlüssel
-
Sowohl Zeilen- als auch Spaltenschlüssel
-
Wert
Lassen Sie uns sehen, wie Sie überprüfen, ob ein Eintrag vorhanden ist:
@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. Entfernung
Wir können einen Eintrag ausTable entfernen, indem wir sowohl den Zeilenschlüssel als auch den Spaltenschlüssel angeben:
@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. Zeilenschlüssel zur Zellenwertzuordnung
Wir können eineMap-Darstellung mit dem Schlüssel als Zeile und dem Wert alsCellValue erhalten, indem wir den Spaltenschlüssel angeben:
@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. Kartendarstellung von aTable
Wir können eineMap<UniversityName, Map<CoursesOffered, SeatAvailable>>-Darstellung erhalten, indem wir diecolumnMap-Methode verwenden:
@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. Spaltenschlüssel zur Zellenwertzuordnung
Wir können eineMap-Darstellung mit dem Schlüssel als Spalte und dem Wert alsCellValue erhalten, indem wir den Zeilenschlüssel angeben:
@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
Wir können alle Zeilenschlüssel mit der MethoderowKeySet aus einer Tabelle abrufen:
@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
Mit der MethodecolumnKeySetkönnen wir alle Spaltenschlüssel aus einer Tabelle abrufen:
@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. Fazit
In diesem Tutorial haben wir die Methoden der KlasseTableaus der Guava-Bibliothek veranschaulicht. Die KlasseTable stellt eine Sammlung bereit, die eine tabellenartige Struktur darstellt, die Zeilen, Spalten und zugehörige Zellenwerte enthält.
Der zu den obigen Beispielen gehörende Code befindet sich inthe GitHub project - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.