Consumer: Gegevens Verwerken
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 functionele interface Consumer gebruikt.
Consumer-interface
Wordt vaak gebruikt voor het uitvoeren van acties die de 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, je hebt een lijst van strings en voor elke string moet je deze afdrukken samen met een uniek id, gescheiden door een spatie. Dit kun je bereiken met de Consumer-interface door elke string samen met zijn index (id) door te geven.
Main.java
12345678910111213141516171819package 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 gebruik van een lus.
De code kan verder vereenvoudigd worden door de lambda-expressie direct binnen de forEach-lus te schrijven:
Main.java
123456789101112package 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 korter en beter leesbaar wordt.
Standaardmethode gebruiken
De Consumer-interface bevat ook een standaardmethode waarmee je meerdere bewerkingen kunt combineren.
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
12345678910111213141516171819202122package 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.
1. Wat doet de methode andThen() in de Consumer-interface?
2. Welk type gegevens accepteert de accept-methode in de Consumer-interface?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Can you show an example of using the Consumer interface with a list?
How does the andThen() method work in practice?
What are some common use cases for the Consumer interface?
Awesome!
Completion rate improved to 2.33
Consumer: 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 functionele interface Consumer gebruikt.
Consumer-interface
Wordt vaak gebruikt voor het uitvoeren van acties die de 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, je hebt een lijst van strings en voor elke string moet je deze afdrukken samen met een uniek id, gescheiden door een spatie. Dit kun je bereiken met de Consumer-interface door elke string samen met zijn index (id) door te geven.
Main.java
12345678910111213141516171819package 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 gebruik van een lus.
De code kan verder vereenvoudigd worden door de lambda-expressie direct binnen de forEach-lus te schrijven:
Main.java
123456789101112package 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 korter en beter leesbaar wordt.
Standaardmethode gebruiken
De Consumer-interface bevat ook een standaardmethode waarmee je meerdere bewerkingen kunt combineren.
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
12345678910111213141516171819202122package 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.
1. Wat doet de methode andThen() in de Consumer-interface?
2. Welk type gegevens accepteert de accept-methode in de Consumer-interface?
Bedankt voor je feedback!