Leitfaden zur Guavagabelle

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.