Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Waarden Verwerken met de Optional-Klasse | Terminale Operaties in de Stream API
Stream-API

bookWaarden Verwerken met de Optional-Klasse

In Java kunnen variabelen die objecten opslaan een null-waarde bevatten. Dit leidt vaak tot een NullPointerException als null niet correct wordt afgehandeld. Deze fouten maken code minder betrouwbaar en moeilijker te onderhouden. Hier biedt Optional uitkomst.

Zie het als een doos—het kan een waarde bevatten, of leeg zijn. In plaats van if-statements te gebruiken om op null te controleren, werk je met deze "doos" en gebruik je handige methoden om de waarde veilig te verkrijgen als die aanwezig is.

Syntax en gebruik van Optional

Het belangrijkste doel van Optional is het voorkomen van NullPointerException door standaardcontroles als if (value != null) te vervangen door meer leesbare methoden.

Er zijn drie manieren om een Optional te maken:

  • Optional.empty() – maakt een lege Optional zonder waarde;
  • Optional.of(value) – omhult het opgegeven object, maar alleen als het gegarandeerd niet-null is;
  • Optional.ofNullable(value) – omhult het object, zelfs als het null is, en creëert zo een gevulde of een lege Optional.
Main.java

Main.java

copy
123456789101112131415
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> emptyOpt = Optional.empty(); Optional<String> optWithValue = Optional.of("Laptop"); Optional<String> optNullable = Optional.ofNullable(null); System.out.println("Empty Optional: " + emptyOpt); System.out.println("Optional with value: " + optWithValue); System.out.println("Optional with null: " + optNullable); } }

Als u null doorgeeft aan Optional.of(value), zal het programma een NullPointerException gooien, dus moet ofNullable() altijd worden gebruikt voor mogelijk lege waarden.

Waarden ophalen uit Optional

Om een waarde uit een Optional te halen, kunt u de methode get() gebruiken.

Main.java

Main.java

copy
12345678910
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> optWithValue = Optional.of("Laptop"); System.out.println("Final string: " + optWithValue.get()); } }

Hier retourneert get() het daadwerkelijke object dat is opgeslagen in de Optional. Als de Optional echter leeg is (bevat null), zal het aanroepen van get() een NoSuchElementException gooien.

Controleren op een waarde

Bij het werken met Optional is het noodzakelijk te controleren of deze een waarde bevat. Een manier om dit te doen is met isPresent(), dat true retourneert als er een waarde aanwezig is. Vaak heeft ifPresent() echter de voorkeur, omdat hiermee een opgegeven lambda-expressie alleen wordt uitgevoerd als de waarde bestaat.

Main.java

Main.java

copy
123456789101112131415161718
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); if (productOpt.isPresent()) { System.out.println("Product found: " + productOpt.get()); } else { System.out.println("Product not found."); } // A more concise approach productOpt.ifPresent(product -> System.out.println("Product: " + product)); } }

In het eerste voorbeeld wordt handmatig gecontroleerd op een waarde met behulp van isPresent() voordat get() wordt aangeroepen. Het tweede voorbeeld elimineert de noodzaak van een if-instructie door gebruik te maken van een lambda-expressie die alleen wordt uitgevoerd als het product aanwezig is.

Een standaardwaarde opgeven

Soms is het verstandig om een alternatief terug te geven wanneer een waarde ontbreekt. Dit kan met orElse(), waarmee een terugvalwaarde wordt geboden. Als het genereren van de terugvalwaarde berekening vereist, is orElseGet() efficiënter, omdat de functie alleen wordt uitgevoerd wanneer dat nodig is.

Main.java

Main.java

copy
123456789101112131415
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); String product = productOpt.orElse("Default product"); System.out.println("Selected product: " + product); String productLazy = productOpt.orElseGet(() -> "Fallback product"); System.out.println("Selected product (lazy): " + productLazy); } }

Het verschil is dat orElse() altijd de terugvalwaarde aanmaakt, zelfs als dit niet nodig is, terwijl orElseGet() de opgegeven functie alleen aanroept als Optional leeg is.

Een uitzondering gooien als de waarde ontbreekt

In sommige gevallen is de afwezigheid van een waarde een fout. In dergelijke situaties kan orElseThrow() worden gebruikt om een uitzondering te gooien.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); String product = productOpt.orElseThrow(() -> new RuntimeException("Product not found")); System.out.println("Product: " + product); } }

Hier, als de Optional leeg is, gooit het programma een RuntimeException. Dit is nuttig wanneer een ontbrekende waarde een kritieke fout betekent.

Waarden transformeren

Vaak bevat een Optional complexe objecten, maar is het alleen nodig om met specifieke velden te werken. In dergelijke gevallen wordt map() gebruikt, waarmee een opgegeven functie wordt toegepast als er een waarde aanwezig is.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable("Laptop"); Optional<Integer> nameLengthOpt = productOpt.map(String::length); nameLengthOpt.ifPresent(length -> System.out.println("Product name length: " + length)); } }

Als de Optional leeg is, retourneert map() eenvoudigweg Optional.empty(). Anders past het String::length toe en retourneert een Optional<Integer>.

Waarden filteren

Soms is het nodig om een waarde alleen te behouden als deze aan een bepaalde voorwaarde voldoet. De methode filter() helpt door de waarde te behouden als het opgegeven predicaat true retourneert, of Optional.empty() te retourneren als niet aan de voorwaarde wordt voldaan.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.of("Laptop"); Optional<String> filteredProductOpt = productOpt.filter(name -> name.length() > 5); filteredProductOpt.ifPresent(name -> System.out.println("Filtered product: " + name)); } }

Als de lengte van de string groter is dan 5, wordt de waarde behouden; anders wordt de Optional leeg.

1. Wat gebeurt er als je get() aanroept op een lege Optional?

2. Wat zal deze code afdrukken?

3. Wat is het resultaat van de volgende code?

4. Welke methode is het meest geschikt om een standaardwaarde te bieden die alleen wordt berekend indien nodig?

question mark

Wat gebeurt er als je get() aanroept op een lege Optional?

Select the correct answer

question mark

Wat zal deze code afdrukken?

Select the correct answer

question mark

Wat is het resultaat van de volgende code?

Select the correct answer

question mark

Welke methode is het meest geschikt om een standaardwaarde te bieden die alleen wordt berekend indien nodig?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 5

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

What are some common methods provided by the Optional class?

Can you give examples of how to use Optional in Java?

Why is using Optional considered better than checking for null directly?

Awesome!

Completion rate improved to 2.33

bookWaarden Verwerken met de Optional-Klasse

Veeg om het menu te tonen

In Java kunnen variabelen die objecten opslaan een null-waarde bevatten. Dit leidt vaak tot een NullPointerException als null niet correct wordt afgehandeld. Deze fouten maken code minder betrouwbaar en moeilijker te onderhouden. Hier biedt Optional uitkomst.

Zie het als een doos—het kan een waarde bevatten, of leeg zijn. In plaats van if-statements te gebruiken om op null te controleren, werk je met deze "doos" en gebruik je handige methoden om de waarde veilig te verkrijgen als die aanwezig is.

Syntax en gebruik van Optional

Het belangrijkste doel van Optional is het voorkomen van NullPointerException door standaardcontroles als if (value != null) te vervangen door meer leesbare methoden.

Er zijn drie manieren om een Optional te maken:

  • Optional.empty() – maakt een lege Optional zonder waarde;
  • Optional.of(value) – omhult het opgegeven object, maar alleen als het gegarandeerd niet-null is;
  • Optional.ofNullable(value) – omhult het object, zelfs als het null is, en creëert zo een gevulde of een lege Optional.
Main.java

Main.java

copy
123456789101112131415
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> emptyOpt = Optional.empty(); Optional<String> optWithValue = Optional.of("Laptop"); Optional<String> optNullable = Optional.ofNullable(null); System.out.println("Empty Optional: " + emptyOpt); System.out.println("Optional with value: " + optWithValue); System.out.println("Optional with null: " + optNullable); } }

Als u null doorgeeft aan Optional.of(value), zal het programma een NullPointerException gooien, dus moet ofNullable() altijd worden gebruikt voor mogelijk lege waarden.

Waarden ophalen uit Optional

Om een waarde uit een Optional te halen, kunt u de methode get() gebruiken.

Main.java

Main.java

copy
12345678910
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> optWithValue = Optional.of("Laptop"); System.out.println("Final string: " + optWithValue.get()); } }

Hier retourneert get() het daadwerkelijke object dat is opgeslagen in de Optional. Als de Optional echter leeg is (bevat null), zal het aanroepen van get() een NoSuchElementException gooien.

Controleren op een waarde

Bij het werken met Optional is het noodzakelijk te controleren of deze een waarde bevat. Een manier om dit te doen is met isPresent(), dat true retourneert als er een waarde aanwezig is. Vaak heeft ifPresent() echter de voorkeur, omdat hiermee een opgegeven lambda-expressie alleen wordt uitgevoerd als de waarde bestaat.

Main.java

Main.java

copy
123456789101112131415161718
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); if (productOpt.isPresent()) { System.out.println("Product found: " + productOpt.get()); } else { System.out.println("Product not found."); } // A more concise approach productOpt.ifPresent(product -> System.out.println("Product: " + product)); } }

In het eerste voorbeeld wordt handmatig gecontroleerd op een waarde met behulp van isPresent() voordat get() wordt aangeroepen. Het tweede voorbeeld elimineert de noodzaak van een if-instructie door gebruik te maken van een lambda-expressie die alleen wordt uitgevoerd als het product aanwezig is.

Een standaardwaarde opgeven

Soms is het verstandig om een alternatief terug te geven wanneer een waarde ontbreekt. Dit kan met orElse(), waarmee een terugvalwaarde wordt geboden. Als het genereren van de terugvalwaarde berekening vereist, is orElseGet() efficiënter, omdat de functie alleen wordt uitgevoerd wanneer dat nodig is.

Main.java

Main.java

copy
123456789101112131415
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); String product = productOpt.orElse("Default product"); System.out.println("Selected product: " + product); String productLazy = productOpt.orElseGet(() -> "Fallback product"); System.out.println("Selected product (lazy): " + productLazy); } }

Het verschil is dat orElse() altijd de terugvalwaarde aanmaakt, zelfs als dit niet nodig is, terwijl orElseGet() de opgegeven functie alleen aanroept als Optional leeg is.

Een uitzondering gooien als de waarde ontbreekt

In sommige gevallen is de afwezigheid van een waarde een fout. In dergelijke situaties kan orElseThrow() worden gebruikt om een uitzondering te gooien.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable(null); String product = productOpt.orElseThrow(() -> new RuntimeException("Product not found")); System.out.println("Product: " + product); } }

Hier, als de Optional leeg is, gooit het programma een RuntimeException. Dit is nuttig wanneer een ontbrekende waarde een kritieke fout betekent.

Waarden transformeren

Vaak bevat een Optional complexe objecten, maar is het alleen nodig om met specifieke velden te werken. In dergelijke gevallen wordt map() gebruikt, waarmee een opgegeven functie wordt toegepast als er een waarde aanwezig is.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.ofNullable("Laptop"); Optional<Integer> nameLengthOpt = productOpt.map(String::length); nameLengthOpt.ifPresent(length -> System.out.println("Product name length: " + length)); } }

Als de Optional leeg is, retourneert map() eenvoudigweg Optional.empty(). Anders past het String::length toe en retourneert een Optional<Integer>.

Waarden filteren

Soms is het nodig om een waarde alleen te behouden als deze aan een bepaalde voorwaarde voldoet. De methode filter() helpt door de waarde te behouden als het opgegeven predicaat true retourneert, of Optional.empty() te retourneren als niet aan de voorwaarde wordt voldaan.

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> productOpt = Optional.of("Laptop"); Optional<String> filteredProductOpt = productOpt.filter(name -> name.length() > 5); filteredProductOpt.ifPresent(name -> System.out.println("Filtered product: " + name)); } }

Als de lengte van de string groter is dan 5, wordt de waarde behouden; anders wordt de Optional leeg.

1. Wat gebeurt er als je get() aanroept op een lege Optional?

2. Wat zal deze code afdrukken?

3. Wat is het resultaat van de volgende code?

4. Welke methode is het meest geschikt om een standaardwaarde te bieden die alleen wordt berekend indien nodig?

question mark

Wat gebeurt er als je get() aanroept op een lege Optional?

Select the correct answer

question mark

Wat zal deze code afdrukken?

Select the correct answer

question mark

Wat is het resultaat van de volgende code?

Select the correct answer

question mark

Welke methode is het meest geschikt om een standaardwaarde te bieden die alleen wordt berekend indien nodig?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 5
some-alt