Java Academy · leksjon

Function og BiFunction

Transformer verdier funksjonelt

Leksjon 1 av 413 trinn

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::toUpperCase kan 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 String og en int til en String.
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.

  • BiFunction har ingen compose, 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 med apply.
  • andThen lenker fremover (g(f(x))); compose lenker bakover (f(g(x))).
  • Function.identity() returnerer inndataene.
  • BiFunction<T,U,R> håndterer to inndata og støtter andThen, men ikke compose.
Gratis å komme i gang

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

  1. Function og BiFunction
  2. Supplier og Consumer
  3. Predicate og komposisjon
  4. Egendefinerte funksjonelle grensesnitt
← Tilbake til Java Academy