Java 9 Valgfritt API-tillegg

1. Oversikt

I denne artikkelen vil vi se på Java 9-tilleggene til Valgfri API.

Utover modularitet, legger Java 9 også til tre veldig nyttige metoder for Valgfri klasse.

2. Den eller() Metode

Noen ganger når vår Valgfri er tom, vil vi utføre en annen handling som også returnerer en Ovalgfritt.

Før Java 9 den Valgfri klassen hadde bare ellers() og orElseGet () metoder, men begge må returnere uåpnede verdier.

Java 9 introduserer eller() metode som returnerer en annen Valgfri lat hvis vår Valgfri er tom. Hvis vår første Valgfri har en definert verdi, blir lambda overført til eller() metoden vil ikke bli påkalt, og verdien blir ikke beregnet og returnert:

@Test offentlig ugyldig gittOptional_whenPresent_thenShouldTakeAValueFromIt () {// gitt String forventet = "properValue"; Valgfri verdi = Valgfri. Av (forventet); Valgfri defaultValue = Optional.of ("standard"); // når Valgfritt resultat = verdi. eller (() -> standardverdi); // deretter assertThat (result.get ()). erEqualTo (forventet); }

I tilfelle av Valgfri being tom, den returnerte resultat vil være det samme som standardverdi:

@Test offentlig ugyldig gittOptional_whenEmpty_thenShouldTakeAValueFromOr () {// gitt streng defaultString = "standard"; Valgfri verdi = Optional.empty (); Valgfri defaultValue = Optional.of (defaultString); // når Valgfritt resultat = verdi. eller (() -> standardverdi); // deretter assertThat (result.get ()). er EqualTo (defaultString); }

3. Den ifPresentOrElse () Metode

Når vi har en Valgfri For eksempel ønsker vi ofte å utføre en bestemt handling på den underliggende verdien av den. På den annen side, hvis Valgfri er tømme vi vil logge det eller spore det faktum ved å øke noen beregninger.

De ifPresentOrElse () metoden er opprettet nøyaktig for slike scenarier. Vi kan passere en Forbruker som vil bli påkalt hvis Valgfri er definert, og Kjørbar som vil bli utført hvis Valgfri er tom.

La oss si at vi har en definert Valgfri og vi vil øke en spesifikk teller hvis verdien er til stede:

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

Vær oppmerksom på at tilbakeringingen passerte ettersom det andre argumentet ikke ble utført.

I tilfelle en tom Valgfri, den andre tilbakeringingen blir utført:

@Test public void givenOptional_whenNotPresent_thenShouldExecuteProperCallback () {// given Optional value = Optional.empty (); AtomicInteger successCounter = nytt AtomicInteger (0); AtomicInteger onEmptyOptionalCounter = nytt AtomicInteger (0); // når value.ifPresentOrElse (v -> successCounter.incrementAndGet (), onEmptyOptionalCounter :: incrementAndGet); // deretter assertThat (successCounter.get ()). isEqualTo (0); assertThat (onEmptyOptionalCounter.get ()). erEqualTo (1); }

4. Den strøm() Metode

Den siste metoden, som legges til Valgfri klasse i Java 9, er strøm() metode.

Java har en veldig flytende og elegant Strøm API som kan fungere på samlingene og bruker mange funksjonelle programmeringskonsepter. Den nyeste Java-versjonen introduserer strøm() metoden på Valgfri klasse det tillater oss å behandle Valgfri eksempel som en Strøm.

La oss si at vi har en definert Valgfri og vi kaller strøm() metode på den. Dette vil skape en Strøm av ett element som vi kan bruke alle metodene som er tilgjengelige i Strøm API:

@Test offentlig ugyldighet gittOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream () {// gitt Valgfri verdi = Optional.of ("a"); // når List collect = value.stream (). map (String :: toUpperCase) .collect (Collectors.toList ()); // deretter assertThat (collect) .hasSameElementsAs (List.of ("A")); }

På den annen side, hvis Valgfri ikke er til stede, kaller strøm() metoden på den vil skape en tom Strøm:

@Test public void givenOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream () {// given Optional value = Optional.empty (); // når List collect = value.stream () .map (String :: toUpperCase) .collect (Collectors.toList ()); // deretter assertThat (collect) .isEmpty (); }

Vi kan nå raskt filtrere Strømmer av Ekstrautstyr.

Kjører på tomt Strøm vil ikke ha noen effekt, men takket være strøm() metoden vi nå kan kjede Valgfri API med Strøm API. Dette lar oss lage mer elegant og flytende kode.

5. Konklusjon

I denne raske artikkelen så vi på Java 9 Valgfri API-tillegg.

Vi så hvordan du bruker eller() metode for å returnere et valgfritt i tilfelle hvis kilden Valgfri er tom. Vi brukte ifPresentOrElse () å utføre Forbruker hvis verdien er tilstede og ellers, kjører du en annen tilbakeringing.

Til slutt så vi hvordan vi skulle lenke Valgfri med Strøm API ved hjelp av strøm() metode.

Implementeringen av alle disse eksemplene og kodebitene finnes i GitHub-prosjektet - dette er et Maven-prosjekt, så det skal være enkelt å importere og kjøre som det er.