Function og BiFunction
Transformer verdier funksjonelt
Function og BiFunction er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva Function representerer
Function<T, R> er det sentrale transformasjonsgrensesnittet i java.util.function. Det tar ett argument av typen T og returnerer et resultat av typen R.
- Den eneste abstrakte metoden er
R apply(T t). - Det modellerer en ren avbildning fra inndata til utdata.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> length = s -> s.length();
System.out.println(length.apply("hello"));
}
}Kalle apply
De kaller en Function ved å bruke apply. Lambda-kroppen inneholder transformasjonslogikken.
- Inndata- og utdatatypene kan være forskjellige.
- En metodereferanse som
String::toUpperCasekan erstatte en lambda.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> upper = String::toUpperCase;
System.out.println(upper.apply("java"));
}
}Komposisjon med andThen
andThen lenker sammen funksjoner: Resultatet fra den første blir inndata til den andre.
f.andThen(g)betyr g(f(x)).- Det leses fra venstre mot høyre.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.andThen(plus3).apply(5));
}
}Komposisjon med compose
compose kjører argumentfunksjonen først.
f.compose(g)betyr f(g(x)).- Det er speilbildet av
andThen.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.compose(plus3).apply(5));
}
}Function.identity
Function.identity() returnerer en funksjon som gir tilbake inndataene uendret.
- Nyttig i stream-collectorer og standardavbildninger.
- Tilsvarer
x -> x.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> id = Function.identity();
System.out.println(id.apply("unchanged"));
}
}Bli kjent med BiFunction
BiFunction<T, U, R> tar to argumenter og returnerer ett resultat.
- Metoden er
R apply(T t, U u). - Velegnet til å kombinere to verdier, for eksempel ved sammenslåing av maps.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
System.out.println(add.apply(4, 6));
}
}BiFunction med blandede typer
De tre typeparameterne i BiFunction kan alle være forskjellige.
- Her kombinerer vi en
Stringog eninttil enString.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<String, Integer, String> repeat = (s, n) -> s.repeat(n);
System.out.println(repeat.apply("ab", 3));
}
}BiFunction og andThen
BiFunction støtter også andThen, som tar en Function med ett argument for etterbehandling av resultatet.
BiFunctionhar ingencompose, fordi den ville trenge to inndata.
import java.util.function.BiFunction;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
Function<Integer, String> label = n -> "sum=" + n;
System.out.println(add.andThen(label).apply(7, 8));
}
}Funksjoner i samlinger
Mange API-er tar imot en Function. For eksempel tar Map.computeIfAbsent imot en avbildningsfunksjon for manglende nøkler.
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> lengths = new HashMap<>();
lengths.computeIfAbsent("hello", String::length);
System.out.println(lengths);
}
}Lagre funksjoner i variabler
Fordi funksjoner er objekter, kan De lagre, sende videre og returnere dem. Dette er grunnlaget for Java i funksjonell stil.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> square = n -> n * n;
Function<Integer, Integer> cube = n -> n * n * n;
Function<Integer, Integer> chosen = square;
System.out.println(chosen.apply(5));
}
}Bygge en pipeline
Ved å lenke andThen flere ganger bygger De en transformasjonspipeline som er lett å lese og gjenbruke.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> trim = String::trim;
Function<String, String> upper = String::toUpperCase;
Function<String, Integer> len = String::length;
System.out.println(trim.andThen(upper).andThen(len).apply(" abc "));
}
}Kort kontroll
Hva beregner f.andThen(g).apply(x)?
Oppsummering
De har lært om de sentrale transformasjonsgrensesnittene:
Function<T,R>avbilder én verdi medapply.andThenlenker fremover (g(f(x)));composelenker bakover (f(g(x))).Function.identity()returnerer inndataene.BiFunction<T,U,R>håndterer to inndata og støtterandThen, men ikkecompose.
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «Function og BiFunction» gratis?
Ja – hele teksten i «Function og BiFunction» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Function og BiFunction»?
Transformer verdier funksjonelt Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Function og BiFunction»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Function og BiFunction
- Supplier og Consumer
- Predicate og komposisjon
- Egendefinerte funksjonelle grensesnitt