Dodatni dodaci za Java 9

1. Pregled

U ovom ćemo članku pogledati dodatke Java 9 za Neobvezno API.

Osim modularnosti, Java 9 također dodaje tri vrlo korisne metode za Neobvezno razred.

2. The ili() Metoda

Ponekad, kad naš Neobvezno je prazno, želimo izvršiti neku drugu radnju koja također vraća Opcionalni.

Prethodna Java 9 Neobvezno razred imao samo ili drugo() i orElseGet () metode, ali obje trebaju vratiti nerazmotane vrijednosti.

Java 9 predstavlja ili() metoda koja vraća drugu Neobvezno lijeno ako je naša Neobvezno prazno je. Ako je naš prvi Neobvezno ima definiranu vrijednost, lambda je proslijeđena na ili() metoda neće biti pozvana, a vrijednost se neće izračunati i vratiti:

@Test javna praznina givenOptional_whenPresent_thenShouldTakeAValueFromIt () {// data String očekuje = "pravilnoValue"; Neobvezna vrijednost = Neobvezna.of (očekuje se); Izborno defaultValue = Izborno.of ("zadano"); // kada Izborni rezultat = vrijednost.ili (() -> zadata vrijednost); // zatim assertThat (result.get ()). isEqualTo (očekuje se); }

U slučaju Neobvezno being prazno, vraćeno proizlaziti bit će isto što i zadana vrijednost:

@Test javna praznina givenOptional_whenEmpty_thenShouldTakeAValueFromOr () {// data String defaultString = "default"; Neobvezna vrijednost = Neobvezna.empty (); Izborno defaultValue = Izborno.of (defaultString); // kada Izborni rezultat = vrijednost.ili (() -> zadata vrijednost); // zatim assertThat (result.get ()). isEqualTo (defaultString); }

3. The ifPresentOrElse () Metoda

Kad imamo Neobvezno Primjerice, često želimo izvršiti određenu radnju na temeljnoj vrijednosti iste. S druge strane, ako je Neobvezno je prazan želimo je zabilježiti ili pratiti tu činjenicu povećavanjem neke metrike.

The ifPresentOrElse () metoda je stvorena upravo za takve scenarije. Možemo proći a Potrošač koji će se pozvati ako Neobvezno je definirano i Izvodljivo koji će se izvršiti ako Neobvezno prazno je.

Recimo da imamo definirano Neobvezno i želimo povećati određeni brojač ako je vrijednost prisutna:

@Test javna praznina givenOptional_whenPresent_thenShouldExecuteProperCallback () {// dana Neobvezna vrijednost = Neobvezna.of ("ProperValue"); AtomicInteger successCounter = novi AtomicInteger (0); AtomicInteger onEmptyOptionalCounter = novi AtomicInteger (0); // kada value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // zatim assertThat (successCounter.get ()). isEqualTo (1); assertThat (onEmptyOptionalCounter.get ()). isEqualTo (0); }

Imajte na umu da povratni poziv proslijeđen kao drugi argument nije izvršen.

U slučaju prazne Neobvezno, izvršava se drugi povratni poziv:

@Test javna praznina givenOptional_whenNotPresent_thenShouldExecuteProperCallback () {// dana Neobvezna vrijednost = Neobvezna.empty (); AtomicInteger successCounter = novi AtomicInteger (0); AtomicInteger onEmptyOptionalCounter = novi AtomicInteger (0); // kada value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // zatim assertThat (successCounter.get ()). isEqualTo (0); assertThat (onEmptyOptionalCounter.get ()). isEqualTo (1); }

4. The stream () Metoda

Posljednja metoda koja se dodaje u Neobvezno klase u Javi 9, je stream () metoda.

Java ima vrlo tečan i elegantan Stream API koji može raditi na zbirkama i koristi mnoge koncepte funkcionalnog programiranja. Najnovija inačica Java uvodi stream () metoda na Neobvezno razred koji omogućuje nam liječenje Neobvezno primjer kao a Potok.

Recimo da imamo definirano Neobvezno a mi zovemo stream () metoda na njemu. Ovo će stvoriti Stream jednog elementa na kojem možemo koristiti sve metode dostupne u Stream API:

@Test javna praznina givenOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream () {// dana Neobvezna vrijednost = Neobvezna.of ("a"); // kada je List collect = value.stream (). map (String :: toUpperCase) .collect (Collectors.toList ()); // zatim assertThat (collect) .hasSameElementsAs (List.of ("A")); }

S druge strane, ako Neobvezno nije prisutan, pozivajući stream () metoda na njemu stvorit će prazno Prijenos:

@Test javna praznina givenOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream () {// data Neobvezna vrijednost = Neobvezna.empty (); // kada je List collect = value.stream () .map (String :: toUpperCase) .collect (Collectors.toList ()); // zatim assertThat (collect) .isEmpty (); }

Sada možemo brzo filtrirati Potoci od Opcionalni.

Operiranje na praznom Stream neće imati učinka, ali zahvaljujući stream () metodu koju sada možemo povezati Neobvezno API s Stream API. To nam omogućuje stvaranje elegantnijeg i fluidnijeg koda.

5. Zaključak

U ovom kratkom članku pogledali smo Java 9 Neobvezno Dodaci za API.

Vidjeli smo kako se koristi ili() metoda za vraćanje Izbornog u slučaju da je izvor Neobvezno prazno je. Koristili smo ifPresentOrElse () izvršiti Potrošač ako je vrijednost prisutna i inače, pokrenite drugi povratni poziv.

Napokon smo vidjeli kako povezati lanca Neobvezno s Stream API pomoću stream () metoda.

Provedbu svih ovih primjera i isječaka koda možete pronaći u projektu GitHub - ovo je Maven projekt, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.