Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Consumer: Gegevens Verwerken | Sectie
Stream-API in Java

bookConsumer: Gegevens Verwerken

Veeg om het menu te tonen

Je hebt al veel functionele interfaces in Java onderzocht, maar wat als je een bewerking moet uitvoeren die een argument aanneemt, enkele wijzigingen toepast of een neveneffect veroorzaakt—zonder een resultaat terug te geven? Hiervoor wordt de Consumer functionele interface gebruikt.

Consumer-interface

Wordt vaak gebruikt voor het uitvoeren van acties die toestand wijzigen of neveneffecten veroorzaken zonder een waarde terug te geven.

De Consumer-interface maakt deel uit van het java.util.function package en is als volgt gedefinieerd:

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

De methode accept(T t) neemt een object van het type T als invoer en voert een bewerking uit zonder een resultaat terug te geven.

Praktische Toepassing

Stel, er is een lijst van strings en voor elke string moet deze samen met een uniek id worden afgedrukt, gescheiden door een spatie. Dit kan worden bereikt met de Consumer-interface door elke string samen met zijn index (id) door te geven.

Main.java

Main.java

copy
12345678910111213141516171819
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Creating a `Consumer` that prints each string with its id Consumer<String> printNameWithId = (name) -> { int id = names.indexOf(name) + 1; // id = index + 1 System.out.println(id + " " + name); }; // Using `Consumer` to print each string with its id names.forEach(printNameWithId); } }

In dit voorbeeld wordt Consumer gebruikt om elke string uit de lijst met een unieke identificatie te printen. De id voor elk element wordt berekend op basis van zijn index in de lijst, en het resultaat wordt afgedrukt in het formaat "id string". Hiermee kunnen lijstelementen verwerkt worden zonder expliciet een lus te gebruiken.

De code kan ook vereenvoudigd worden door de lambda-expressie direct binnen de forEach-lus te schrijven:

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Using `forEach` with a lambda expression to print the ID and name names.forEach(name -> System.out.println((names.indexOf(name) + 1) + " " + name)); } }

Zoals je kunt zien blijft het resultaat hetzelfde, terwijl de code bondiger en makkelijker leesbaar wordt.

Standaardmethode gebruiken

De Consumer-interface bevat ook een standaardmethode waarmee het combineren van meerdere bewerkingen mogelijk is.

Met de methode andThen() kun je twee Consumer-bewerkingen achter elkaar schakelen. De eerste Consumer wordt eerst uitgevoerd, gevolgd door de tweede.

Stel bijvoorbeeld dat je een lijst met namen hebt en je wilt twee taken uitvoeren: elke naam in hoofdletters afdrukken en vervolgens de lengte van die naam afdrukken. Door andThen() te gebruiken, kun je beide bewerkingen combineren in één enkele Consumer die ze opeenvolgend toepast.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // First `Consumer` — prints the name in uppercase Consumer<String> printUpperCase = name -> System.out.print(name.toUpperCase() + " - "); // Second `Consumer` — prints the length of the name Consumer<String> printLength = name -> System.out.println(name.length()); // Combine both `Consumers` using `andThen()` Consumer<String> combinedConsumer = printUpperCase.andThen(printLength); // Apply the combined `Consumer` to each name names.forEach(combinedConsumer); } }

In dit voorbeeld wordt eerst de naam in hoofdletters afgedrukt, gevolgd door een streepje en de lengte van de naam. Met andThen() worden twee Consumer-operaties gecombineerd zodat de eerste de naam afdrukt en de tweede de lengte ervan afdrukt.

1. Wat doet de methode andThen() in de Consumer-interface?

2. Welk type gegevens accepteert de accept-methode in de Consumer-interface?

question mark

Wat doet de methode andThen() in de Consumer-interface?

Select the correct answer

question mark

Welk type gegevens accepteert de accept-methode in de Consumer-interface?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 11

Vraag AI

expand

Vraag AI

ChatGPT

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

Sectie 1. Hoofdstuk 11
some-alt