Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Consumer: Databehandling | Grunnleggende og Funksjonelle Egenskaper ved Stream API
Stream-API

bookConsumer: Databehandling

Du har allerede utforsket mange funksjonelle grensesnitt i Java, men hva om du trenger å utføre en operasjon som tar et argument, gjør noen endringer eller gir en sideeffekt—uten å returnere et resultat? Dette er hvor det funksjonelle grensesnittet Consumer kommer inn.

Consumer-grensesnittet

Det brukes ofte til å utføre handlinger som modifiserer tilstand eller gir sideeffekter uten å returnere en verdi.

Consumer-grensesnittet er en del av java.util.function package og er definert som følger:

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

Metoden accept(T t) tar et objekt av typen T som input og utfører en operasjon på det uten å returnere et resultat.

Praktisk anvendelse

Anta at du har en liste med strenger, og for hver streng må du skrive ut den sammen med en unik id, adskilt med et mellomrom. Dette kan oppnås ved å bruke Consumer-grensesnittet ved å sende hver streng sammen med dens indeks (id).

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); } }

I dette eksemplet brukes Consumer til å skrive ut hver streng fra listen med en unik identifikator. Id-en for hvert element beregnes ved hjelp av dets indeks i listen, og resultatet skrives ut i formatet "id string". Dette gjør det mulig å behandle listeelementer uten eksplisitt bruk av løkke.

Koden kan også forenkles ved å skrive lambda-uttrykket direkte inne i forEach-løkka:

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)); } }

Som du kan se, forblir resultatet det samme, samtidig som koden blir mer kortfattet og enklere å lese.

Bruk av standardmetode

Consumer-grensesnittet inkluderer også en standardmetode som muliggjør kombinering av flere operasjoner.

Metoden andThen() gjør det mulig å kjedekoble to Consumer-operasjoner. Den første Consumer kjøres først, etterfulgt av den andre.

For eksempel, tenk deg at du har en liste med navn, og du ønsker å utføre to oppgaver: skrive ut hvert navn med store bokstaver og deretter skrive ut lengden på navnet. Ved å bruke andThen() kan du kombinere begge operasjonene i én Consumer som utfører dem sekvensielt.

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); } }

I dette eksemplet skrives først navnet ut i store bokstaver, etterfulgt av en bindestrek og navnets lengde. Du bruker andThen() for å kombinere to Consumer-operasjoner slik at den første skriver ut navnet, og den andre skriver ut lengden.

1. Hva gjør metoden andThen() i Consumer-grensesnittet?

2. Hvilken type data tar metoden accept i Consumer-grensesnittet inn?

question mark

Hva gjør metoden andThen() i Consumer-grensesnittet?

Select the correct answer

question mark

Hvilken type data tar metoden accept i Consumer-grensesnittet inn?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 11

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 2.33

bookConsumer: Databehandling

Sveip for å vise menyen

Du har allerede utforsket mange funksjonelle grensesnitt i Java, men hva om du trenger å utføre en operasjon som tar et argument, gjør noen endringer eller gir en sideeffekt—uten å returnere et resultat? Dette er hvor det funksjonelle grensesnittet Consumer kommer inn.

Consumer-grensesnittet

Det brukes ofte til å utføre handlinger som modifiserer tilstand eller gir sideeffekter uten å returnere en verdi.

Consumer-grensesnittet er en del av java.util.function package og er definert som følger:

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

Metoden accept(T t) tar et objekt av typen T som input og utfører en operasjon på det uten å returnere et resultat.

Praktisk anvendelse

Anta at du har en liste med strenger, og for hver streng må du skrive ut den sammen med en unik id, adskilt med et mellomrom. Dette kan oppnås ved å bruke Consumer-grensesnittet ved å sende hver streng sammen med dens indeks (id).

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); } }

I dette eksemplet brukes Consumer til å skrive ut hver streng fra listen med en unik identifikator. Id-en for hvert element beregnes ved hjelp av dets indeks i listen, og resultatet skrives ut i formatet "id string". Dette gjør det mulig å behandle listeelementer uten eksplisitt bruk av løkke.

Koden kan også forenkles ved å skrive lambda-uttrykket direkte inne i forEach-løkka:

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)); } }

Som du kan se, forblir resultatet det samme, samtidig som koden blir mer kortfattet og enklere å lese.

Bruk av standardmetode

Consumer-grensesnittet inkluderer også en standardmetode som muliggjør kombinering av flere operasjoner.

Metoden andThen() gjør det mulig å kjedekoble to Consumer-operasjoner. Den første Consumer kjøres først, etterfulgt av den andre.

For eksempel, tenk deg at du har en liste med navn, og du ønsker å utføre to oppgaver: skrive ut hvert navn med store bokstaver og deretter skrive ut lengden på navnet. Ved å bruke andThen() kan du kombinere begge operasjonene i én Consumer som utfører dem sekvensielt.

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); } }

I dette eksemplet skrives først navnet ut i store bokstaver, etterfulgt av en bindestrek og navnets lengde. Du bruker andThen() for å kombinere to Consumer-operasjoner slik at den første skriver ut navnet, og den andre skriver ut lengden.

1. Hva gjør metoden andThen() i Consumer-grensesnittet?

2. Hvilken type data tar metoden accept i Consumer-grensesnittet inn?

question mark

Hva gjør metoden andThen() i Consumer-grensesnittet?

Select the correct answer

question mark

Hvilken type data tar metoden accept i Consumer-grensesnittet inn?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 11
some-alt