Java 9 Valgfri API-tilføjelser

1. Oversigt

I denne artikel vil vi se på Java 9 tilføjelser til Valgfri API.

Ud over modularitet tilføjer Java 9 også tre meget nyttige metoder til Valgfri klasse.

2. Den eller() Metode

Nogle gange, når vores Valgfri er tom, vil vi udføre en anden handling, der også returnerer en Ovalgfri.

Forud for Java 9 den Valgfri klasse havde kun ellers() og orElseGet () metoder, men begge har brug for at returnere uindpakkede værdier.

Java 9 introducerer eller() metode, der returnerer en anden Valgfri doven hvis vores Valgfri er tom. Hvis vores første Valgfri har en defineret værdi, går lambda videre til eller() metode påkræves ikke, og værdien beregnes ikke og returneres:

@Test offentligt ugyldigt givetOptional_whenPresent_thenShouldTakeAValueFromIt () {// given streng forventet = "properValue"; Valgfri værdi = Optional.of (forventet); Valgfri defaultValue = Optional.of ("standard"); // når Valgfrit resultat = værdi. eller (() -> standardværdi); // derefter assertThat (result.get ()). er EqualTo (forventet); }

I tilfælde af Valgfri being tom, den returnerede resultat vil være det samme som standard værdi:

@Test offentligt ugyldigt givenOptional_whenEmpty_thenShouldTakeAValueFromOr () {// given String defaultString = "default"; Valgfri værdi = Optional.empty (); Valgfri defaultValue = Optional.of (defaultString); // når Valgfrit resultat = værdi. eller (() -> standardværdi); // derefter assertThat (result.get ()). er EqualTo (defaultString); }

3. Den ifPresentOrElse () Metode

Når vi har en Valgfri eksempel, ofte ønsker vi at udføre en bestemt handling på den underliggende værdi af den. På den anden side, hvis Valgfri er tom Vi ønsker at logge det eller spore den kendsgerning ved at øge en metric.

Det ifPresentOrElse () metode oprettes nøjagtigt til sådanne scenarier. Vi kan passere en Forbruger der vil blive påberåbt sig, hvis Valgfri er defineret, og Kan køres der udføres, hvis Valgfri er tom.

Lad os sige, at vi har en defineret Valgfri og vi vil øge en bestemt tæller, hvis værdien er til stede:

@Test public void givenOptional_whenPresent_thenShouldExecuteProperCallback () {// given Optional value = Optional.of ("properValue"); AtomicInteger successCounter = nyt AtomicInteger (0); AtomicInteger onEmptyOptionalCounter = nyt AtomicInteger (0); // når value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // derefter assertThat (successCounter.get ()). isEqualTo (1); assertThat (onEmptyOptionalCounter.get ()). er EqualTo (0); }

Bemærk, at tilbagekaldet blev bestået, da det andet argument ikke blev udført.

I tilfælde af en tom Valgfri, det andet tilbagekald bliver udført:

@Test offentlig ugyldighed givenOptional_whenNotPresent_thenShouldExecuteProperCallback () {// given Valgfri værdi = Optional.empty (); AtomicInteger successCounter = nyt AtomicInteger (0); AtomicInteger onEmptyOptionalCounter = nyt AtomicInteger (0); // når value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // derefter assertThat (successCounter.get ()). isEqualTo (0); assertThat (onEmptyOptionalCounter.get ()). er EqualTo (1); }

4. Den strøm() Metode

Den sidste metode, der føjes til Valgfri klasse i Java 9, er strøm() metode.

Java har en meget flydende og elegant Strøm API, der kan fungere på samlingerne og bruger mange funktionelle programmeringskoncepter. Den nyeste Java-version introducerer strøm() metode til Valgfri klasse det giver os mulighed for at behandle Valgfri eksempel som en Strøm.

Lad os sige, at vi har en defineret Valgfri og vi kalder strøm() metode på det. Dette vil skabe en Strøm af et element, hvor vi kan bruge alle de metoder, der er tilgængelige i Strøm API:

@Test offentligt ugyldigt givetOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream () {// given Optional value = Optional.of ("a"); // når List collect = value.stream (). map (String :: toUpperCase) .collect (Collectors.toList ()); // derefter assertThat (collect) .hasSameElementsAs (List.of ("A")); }

På den anden side, hvis Valgfri er ikke til stede, kalder strøm() metode på det vil skabe en tom Strøm:

@Test offentlig ugyldighed givenOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream () {// given Valgfri værdi = Optional.empty (); // når List collect = value.stream () .map (String :: toUpperCase) .collect (Collectors.toList ()); // derefter assertThat (indsamle) .isEmpty (); }

Vi kan nu hurtigt filtrere Strømme af Ekstraudstyr.

Kører på det tomme Strøm vil ikke have nogen effekt, men takket være strøm() metode kan vi nu kæde Valgfri API med Strøm API. Dette giver os mulighed for at skabe mere elegant og flydende kode.

5. Konklusion

I denne hurtige artikel kiggede vi på Java 9 Valgfri API-tilføjelser.

Vi så, hvordan man bruger eller() metode til at returnere et valgfrit, hvis kilden Valgfri er tom. Vi brugte ifPresentOrElse () at udføre Forbruger hvis værdien er til stede og ellers skal du køre den anden tilbagekaldelse.

Endelig så vi, hvordan vi kædes Valgfri med Strøm API ved hjælp af strøm() metode.

Implementeringen af ​​alle disse eksempler og kodestykker findes i GitHub-projektet - dette er et Maven-projekt, så det skal være let at importere og køre, som det er.