Function ja BiFunction
Muunna arvoja funktionaalisesti.
Function ja BiFunction on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä Function edustaa
Function<T, R> on java.util.function-paketin keskeinen muunnosrajapinta. Se ottaa vastaan yhden tyypin T argumentin ja palauttaa tyypin R tuloksen.
- Sen ainoa abstrakti metodi on
R apply(T t). - Se kuvaa puhdasta muunnosta syötteestä tulokseksi.
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"));
}
}apply-metodin kutsuminen
Function-oliota käytetään kutsumalla apply-metodia. Lambdan runko sisältää muunnoslogiikan.
- Syötteen ja tuloksen tyypit voivat olla erilaiset.
- Metodiviittaus, kuten
String::toUpperCase, voi korvata lambdan.
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"));
}
}andThen-koostaminen
andThen ketjuttaa funktioita: ensimmäisen funktion tuloksesta tulee toisen funktion syöte.
f.andThen(g)tarkoittaa g(f(x)).- Ketju luetaan vasemmalta oikealle.
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));
}
}compose-koostaminen
compose suorittaa argumenttina annetun funktion ensin.
f.compose(g)tarkoittaa f(g(x)).- Se toimii
andThen-koostamisen peilikuvana.
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() palauttaa funktion, joka antaa syötteensä takaisin muuttamattomana.
- Se on hyödyllinen stream-kerääjissä ja oletuskuvauksissa.
- Se vastaa muotoa
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"));
}
}Tutustuminen BiFunctioniin
BiFunction<T, U, R> ottaa vastaan kaksi argumenttia ja palauttaa yhden tuloksen.
- Sen metodi on
R apply(T t, U u). - Se sopii erinomaisesti kahden arvon yhdistämiseen, esimerkiksi map-rakenteiden yhdistämiseen.
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 eri tyyppien kanssa
BiFunction-rajapinnan kolme tyyppiparametria voivat kaikki olla erilaisia.
- Tässä
StringjaintyhdistetäänString-tyyppiseksi tulokseksi.
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 ja andThen
BiFunction tukee myös andThen-metodia, joka ottaa yksiparametrisen Function-funktion tuloksen jälkikäsittelyä varten.
BiFunction-rajapinnassa ei olecompose-metodia, koska se tarvitsisi kaksi syötettä.
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));
}
}Funktiot kokoelmissa
Monet rajapinnat hyväksyvät Function-funktion. Esimerkiksi Map.computeIfAbsent ottaa kuvausfunktion puuttuvia avaimia varten.
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);
}
}Funktioiden tallentaminen muuttujiin
Koska funktiot ovat olioita, niitä voi tallentaa, välittää eteenpäin ja palauttaa. Tämä on funktionaalisen Java-tyylin perusta.
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));
}
}Käsittelyketjun rakentaminen
Kun andThen-metodia ketjutetaan toistuvasti, syntyy selkeä ja uudelleenkäytettävä muunnosketju.
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 "));
}
}Pikatarkistus
Mitä f.andThen(g).apply(x) laskee?
Kertaus
Opit keskeiset muunnosrajapinnat:
Function<T,R>muuntaa yhden arvonapply-metodilla.andThenketjuttaa eteenpäin (g(f(x)));composeketjuttaa taaksepäin (f(g(x))).Function.identity()palauttaa syötteensä.BiFunction<T,U,R>käsittelee kaksi syötettä ja tukeeandThen-metodia, mutta eicompose-metodia.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Function ja BiFunction” ilmainen?
Kyllä – oppitunnin ”Function ja BiFunction” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Function ja BiFunction”?
Muunna arvoja funktionaalisesti. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Function ja BiFunction”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Function ja BiFunction
- Supplier ja Consumer
- Predicate ja koostaminen
- Mukautetut funktionaaliset rajapinnat