Guide til Guava Table

1. Oversikt

I denne veiledningen vil vi vise hvordan du bruker Google Guava Bord grensesnitt og dets mange implementeringer.

Guava Bord er en samling som representerer en tabelllignende struktur som inneholder rader, kolonner og tilhørende celleverdier. Raden og kolonnen fungerer som et ordnet nøkkelpar.

2. Google Guava Bord

La oss ta en titt på hvordan du bruker Bord klasse.

2.1. Maven avhengighet

La oss starte med å legge til Googles avhengighet av Guava-biblioteket i pom.xml:

 com.google.guava guava 29.0-jre 

Den siste versjonen av avhengigheten kan sjekkes her.

2.2. Om

Hvis vi skulle representere Guava Bord ved hjelp av Samlinger til stede i kjernen Java, vil strukturen være et kart over rader der hver rad inneholder et kart med kolonner med tilhørende celleverdier.

Bord representerer et spesielt kart der to nøkler kan spesifiseres på en kombinert måte for å referere til en enkelt verdi.

Det ligner på å lage et kart med kart, for eksempel Kart. Bord ville også være en perfekt måte å representere Battleships-spillbrettet på.

3. Å skape

Du kan opprette en forekomst av Bord på flere måter:

  • Bruker skape metode fra klassen HashBasedTable som bruker LinkedHashMap internt:
    TabelluniversitetCourseSeatTable = HashBasedTable.create ();
  • Hvis vi trenger en Bord hvis radnøkler og kolonnetastene må bestilles etter deres naturlige rekkefølge eller ved å levere komparatorer, kan du opprette en forekomst av en Bord bruker skape metode fra en klasse som heter TreeBasedTable, som bruker TreeMap internt:
    Table universityCourseSeatTable = TreeBasedTable.create (); 
  • Hvis vi kjenner radenøklene og kolonnetastene på forhånd, og bordstørrelsen er løst, bruk skape metode fra klassen ArrayTable:
    Liste universityRowTable = Lists.newArrayList ("Mumbai", "Harvard"); List courseColumnTables = Lists.newArrayList ("Kjemisk", "IT", "Elektrisk"); Table universityCourseSeatTable = ArrayTable.create (universityRowTable, courseColumnTables); 
  • Hvis vi har tenkt å lage en uforanderlig forekomst av Bord hvis interne data aldri kommer til å endres, bruk ImmutableTable klasse (oppretter som følger et byggmønster):
    TabelluniversitetCourseSeatTable = ImmutableTable. builder () .put ("Mumbai", "Chemical", 120) .build (); 

4. Bruke

La oss starte med et enkelt eksempel som viser bruken av Bord.

4.1. Henting

Hvis vi kjenner radnøkkelen og kolonnenøkkelen, kan vi få verdien som er knyttet til raden og kolonnenøkkelen:

@Test offentlig ugyldighet 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. Ser etter en oppføring

Vi kan sjekke tilstedeværelsen av en oppføring i a Bord basert på:

  • Radnøkkel
  • Kolonnetast
  • Både radnøkkel og kolonnetast
  • Verdi

La oss se hvordan vi kan sjekke om det er en oppføring:

@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); boolsk entryIsPresent = universityCourseSeatTable.contains ("Mumbai", "IT"); boolsk kursIsPresent = universityCourseSeatTable.containsColumn ("IT"); boolsk universitetIsPresent = universityCourseSeatTable.containsRow ("Mumbai"); boolsk seatCountIsPresent = universityCourseSeatTable.containsValue (60); assertThat (entryIsPresent) .isEqualTo (true); assertThat (courseIsPresent) .isEqualTo (true); assertThat (universityIsPresent) .isEqualTo (true); assertThat (seatCountIsPresent) .isEqualTo (true); }

4.3. Fjerning

Vi kan fjerne en oppføring fra Bord ved å oppgi både radnøkkel og kolonnøkkel:

@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. Radnøkkel til celleverdikart

Vi kan få en Kart representasjon med nøkkelen som en rad og verdien som en CellValue ved å oppgi kolonnetasten:

@Test offentlig ugyldighet 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); Kart universitetSeatMap = universityCourseSeatTable.column ("IT"); assertThat (universitySeatMap) .hasSize (2); assertThat (universitySeatMap.get ("Mumbai")). er EqualTo (60); assertThat (universitySeatMap.get ("Harvard")). er EqualTo (120); } 

4.5. Kartrepresentasjon av en Bord

Vi kan få en Kart representasjon ved hjelp av columnMap metode:

@Test offentlig ugyldig 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); Kart courseKeyUniversitySeatMap = universityCourseSeatTable.columnMap (); assertThat (courseKeyUniversitySeatMap) .hasSize (3); assertThat (courseKeyUniversitySeatMap.get ("IT")). hasSize (2); assertThat (courseKeyUniversitySeatMap.get ("Electrical")). hasSize (1); assertThat (courseKeyUniversitySeatMap.get ("Chemical")). harSize (1); } 

4.6. Kolonnøkkel til celleverdikart

Vi kan få en Kart representasjon med nøkkelen som en kolonne og verdien som en CellValue ved å oppgi radnøkkel:

@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); KartkursSeatMap = universityCourseSeatTable.row ("Mumbai"); assertThat (courseSeatMap) .hasSize (2); assertThat (courseSeatMap.get ("IT")). er EqualTo (60); assertThat (courseSeatMap.get ("Chemical")) er EqualTo (120); } 

4.7. Få Distinct Row Key

Vi kan få alle radetastene fra en tabell ved hjelp av rowKeySet metode:

@Test offentlig ugyldighet 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); Sett universitySet = universityCourseSeatTable.rowKeySet (); assertThat (universitySet) .hasSize (2); } 

4.8. Få Distinct Column Key

Vi kan få alle kolonnetastene fra en tabell ved hjelp av columnKeySet metode:

@Test offentlig ugyldighet 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); Sett kursSett = universitetCourseSeatTable.columnKeySet (); assertThat (courseSet) .hasSize (3); } 

5. Konklusjon

I denne opplæringen illustrerte vi metodene til Bord klasse fra Guava-biblioteket. De Bord klasse gir en samling som representerer en tabelllignende struktur som inneholder rader, kolonner og tilknyttede celleverdier.

Koden som hører til eksemplene ovenfor, finnes i GitHub-prosjektet - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found