Uvod u Javatuples

1. Pregled

Tuple je zbirka nekoliko elemenata koji mogu biti ili ne moraju biti povezani jedni s drugima. Drugim riječima, torte se mogu smatrati anonimnim objektima.

Na primjer, [„RAM“, 16, „Astra“] skup je koji sadrži tri elementa.

U ovom ćemo članku na brzinu pogledati doista jednostavnu knjižnicu koja nam omogućuje rad sa podatkovnim strukturama temeljenim na korpicama, nazvanim javatuples.

2. Ugrađeni Javatuples Nastava

Ova nam knjižnica nudi deset različitih klasa koje bi bile dovoljne za većinu naših zahtjeva koji se odnose na korice:

  • Jedinica
  • Par
  • Triplet
  • Kvartet
  • Kvintet
  • Sekstet
  • Septet
  • Oktet
  • Ennead
  • Desetljeće

Pored gore navedenih razreda, postoje dva dodatna razreda, KeyValue i LabelValue, koji pružaju funkcionalnosti slične Par, ali se razlikuju u semantici.

Prema službenoj stranici, svi razredi ujavatuples su sigurni i nepromjenjivi. Svaka klasa tuple implementira Iterativ, Serijalizirati, i Usporedive sučelje.

3. Dodavanje ovisnosti Maven

Dodajmo ovisnost Mavena na našu pom.xml:

 org.javatuples javatuples 1.2 

Molimo provjerite Central Maven spremište za najnoviju verziju.

4. Stvaranje korijena

Stvaranje korijena zaista je jednostavno. Možemo koristiti odgovarajuće konstruktore:

Parni par = novi par ("Par", 55);

Postoji i malo manje opširan i semantički elegantan način stvaranja tuple:

Triplet triplet = Triplet.with ("zdravo", 23, 1.2);

Također možemo stvoriti korice iz Iterativ:

Popis listOfNames = Arrays.asList ("john", "doe", "anne", "alex"); Kvartet kvartet = Quartet.fromCollection (collectionOfNames);

Imajte na umu da broj predmeta u kolekciji trebao bi odgovarati vrsti korice koju želimo stvoriti. Na primjer, ne možemo stvoriti Kvintet koristeći gornju zbirku jer zahtijeva točno pet elemenata. Isto vrijedi i za bilo koju drugu klasu torti koja ima viši poredak od Kvintet.

Međutim, možemo stvoriti korice nižeg reda poput Par ili a Triplet pomoću gornje zbirke, specificiranjem početnog indeksa u fromIterable () metoda:

Pair pairFromList = Pair.fromIterable (listOfNames, 2);

Gornji kod rezultirat će stvaranjem a Par koji sadrži „anne"I"alex“.

Tuple se mogu prikladno stvoriti i iz bilo kojeg niza:

Niz [] imena = novi Niz [] {"john", "doe", "anne"}; Triplet triplet2 = Triplet.fromArray (imena);

5. Dobivanje vrijednosti iz korijena

Svaki razred u javatuples ima getValueX () metoda za dobivanje vrijednosti iz korijena, gdje x određuje redoslijed elementa unutar korpice. Poput indeksa u nizovima, vrijednost x počinje od nule.

Stvorimo novi kvartet i dohvatimo neke vrijednosti:

Kvartet kvartet = Quartet.with ("john", 72,5, 32, "1051 SW"); Ime niza = quartet.getValue0 (); Cijelo doba = kvartet.getValue2 (); assertThat (name) .isEqualTo ("john"); assertThat (dob) .isEqualTo (32);

Kao što vidimo, stav „Ivan"Je nula,"72.5”Je jedan, i tako dalje.

Imajte na umu da getValueX () metode su sigurne za tip. To znači da nije potrebno lijevanje.

Alternativa ovome je getValue (int poz) metoda. Potrebna je pozicija elementa koji se preuzima na temelju nule. Ova metoda nije sigurna za tip i zahtijeva izričito lijevanje:

Kvartet kvartet = Quartet.with ("john", 72,5, 32, "1051 SW"); Ime niza = (Niz) quartet.getValue (0); Integer age = (Integer) quartet.getValue (2); assertThat (name) .isEqualTo ("john"); assertThat (dob) .isEqualTo (32);

Napominjemo da nastava KeyValue i LabelValue imaju odgovarajuće metode getKey () / getValue () i getLabel () / getValue ().

6. Postavljanje vrijednosti na korijene

Slično getValueX (), svi razredi u javatuples imaju setAtX () metode. Opet, x je pozicija zasnovana na nuli za element koji želimo postaviti:

Pair john = Pair.with ("john", 32); Par alex = john.setAt0 ("alex"); assertThat (john.toString ()). isNotEqualTo (alex.toString ());

Ovdje je najvažnija vrsta povratka setAtX () metoda je sama vrsta kornice. Ovo je zbog javatuples su nepromjenjivi. Postavljanjem bilo koje nove vrijednosti izvorna će instanca ostati netaknuta.

7. Dodavanje i uklanjanje elemenata iz korijena

Tuplevima možemo prikladno dodati nove elemente. Međutim, to će rezultirati stvaranjem nove korpice reda višeg reda:

Parni par1 = Par.with ("john", 32); Triplet triplet1 = pair1.add ("1051 SW"); assertThat (triplet1.contens ("john")); assertThat (triplet1. sadrži (32)); assertThat (triplet1.contens ("1051 SW"));

Iz gornjeg primjera jasno je da dodavanje jednog elementa u Par stvorit će novi Triplet. Slično tome, dodavanje jednog elementa u Triplet stvorit će novi Kvartet.

Gornji primjer također pokazuje upotrebu sadrži () metodu koju pružaju svi razredi u javatuples. Ovo je stvarno zgodna metoda za provjeru sadrži li korpa zadanu vrijednost.

Također je moguće dodati jedan tuple u drugi pomoću dodati() metoda:

Parni par1 = Par.with ("john", 32); Par para2 = Par.with ("alex", 45); Kvartet kvartet2 = pair1.add (pair2); assertThat (quartet2.containsAll (pair1)); assertThat (quartet2.containsAll (pair2));

Obratite pažnju na upotrebu sadržiSve () metoda. Vratit će se pravi ako su svi elementi par1 prisutni su u kvartet2.

Prema zadanim postavkama dodati() metoda dodaje element kao posljednji element korpice. Međutim, moguće je dodati element na danom položaju pomoću addAtX () metoda, gdje x je pozicija zasnovana na nuli gdje želimo dodati element:

Parni par1 = Par.with ("john", 32); Triplet triplet2 = pair1.addAt1 ("1051 SW"); assertThat (triplet2.indexOf ("john")). isEqualTo (0); assertThat (triplet2.indexOf ("1051 SW")). isEqualTo (1); assertThat (triplet2.indexOf (32)). isEqualTo (2);

Ovaj primjer dodaje Niz na položaju 1, koji zatim provjerava indexOf () metoda. Napominjemo razliku u redoslijedu vrsta za Par i Triplet nakon poziva na addAt1 () poziv metode.

Također možemo dodati više elemenata koristeći bilo koji od dodati() ili addAtX () metode:

Parni par1 = Par.with ("john", 32); Kvartet kvartet1 = pair1.add ("alex", 45); assertThat (quartet1.containsAll ("alex", "john", 32, 45));

Da bismo uklonili element iz korijena, možemo koristiti removeFromX () metoda. Opet, x određuje položaj elementa koji će se ukloniti na temelju nule:

Parni par1 = Par.with ("john", 32); Jedinica jedinice = pair1.removeFrom0 (); assertThat (unit.contens (32));

8. Pretvaranje Tuplea u Popis / polje

Već smo vidjeli kako pretvoriti a Popis na korijen. Pogledajmo sada vruće za pretvaranje korpice u a Popis:

Kvartet kvartet = Quartet.with ("john", 72,5, 32, "1051 SW"); Lista popisa = quartet.toList (); assertThat (list.size ()). isEqualTo (4);

Prilično je jednostavno. Ovdje treba napomenuti jedino da ćemo uvijek dobiti a Popis, čak i ako tuple sadrži istu vrstu elemenata.

Na kraju, pretvorimo tuple u niz:

Kvartet kvartet = Quartet.with ("john", 72,5, 32, "1051 SW"); Objekt [] niz = kvartet.toArray (); assertThat (array.length) .isEqualTo (4);

Jasno, toArray () metoda uvijek vraća Objekt[].

9. Zaključak

U ovom smo članku istražili biblioteku javatuples i uočili njezinu jednostavnost. Pruža elegantnu semantiku i zaista je jednostavan za upotrebu.

Obavezno pogledajte cjeloviti izvorni kod za ovaj članak na GitHubu. Cjeloviti izvorni kod sadrži malo više primjera od ovdje obrađenih. Nakon čitanja ovog članka, dodatni primjeri trebali bi biti lako razumljivi.