Funktionaalisten Rajapintojen Bi-Versiot
Javassa on useita funktionaalisten rajapintojen bi-versioita, jotka toimivat kahden argumentin kanssa. Nämä rajapinnat tarjoavat käteviä malleja erilaisten operaatioiden suorittamiseen syöteparilla, oli kyseessä sitten tuloksen laskeminen, toiminnon suorittaminen tai ehdon tarkistaminen.
Ne yksinkertaistavat käsittelyä monimutkaisissa tilanteissa, joissa täytyy työskennellä kahden parametrin kanssa samanaikaisesti.
Esimerkiksi, sen sijaan että kirjoittaisit monimutkaista koodia useilla sisäkkäisillä kutsuilla, voit hyödyntää ytimekkäitä rajapintoja, jotka tarjoavat valmiita metodeja keskeisten toimintojen toteuttamiseen.
BiFunction<T, U, R>
BiFunction on funktionaalinen rajapinta, joka ottaa kaksi syöteparametria tyypeistä T ja U ja palauttaa tuloksen tyyppiä R.
@FunctionalInterface
public interface BiFunction<T, U, R> {
R apply(T t, U u);
}
BiFunction on ihanteellinen tilanteisiin, joissa täytyy käsitellä kahta arvoa ja palauttaa johdettu tulos, kuten laskenta, muunnos tai datan yhdistäminen.
Esimerkiksi, jos täytyy laskea varastossa olevien tuotteiden kokonaiskustannus kertomalla määrä ja yksikköhinta:
Main.java
1234567891011121314151617package com.example; import java.util.function.BiFunction; public class Main { public static void main(String[] args) { // `BiFunction` to calculate total cost BiFunction<Integer, Double, Double> calculateTotalCost = (quantity, pricePerUnit) -> quantity * pricePerUnit; // Example usage int quantity = 50; double pricePerUnit = 19.99; double totalCost = calculateTotalCost.apply(quantity, pricePerUnit); System.out.println("Total cost: $" + totalCost); } }
Tässä esimerkissä BiFunction<Integer, Double, Double> ottaa vastaan kaksi argumenttia: quantity ja pricePerUnit (yksikköhinta), ja palauttaa tuloksen — kokonaiskustannuksen Double-arvona. apply()-metodi suorittaa määritellyn operaation, yhdistäen funktionaalisen rajapinnan kertolaskulogiikkaan.
BiConsumer<T, U>
BiConsumer on funktionaalinen rajapinta, joka ottaa vastaan kaksi argumenttia tyypeistä T ja U, mutta ei palauta tulosta.
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
}
Käytetään toimintojen suorittamiseen kahdelle objektille, kuten lokitietojen kirjaamiseen, tietojen näyttämiseen tai datan tallentamiseen.
Esimerkiksi luodaan funktionaalinen rajapinta, joka ottaa vastaan työntekijän nimen ja palkan, muotoilee tiedot ja tulostaa ne konsoliin:
Main.java
1234567891011121314151617181920212223242526package com.example; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; public class Main { public static void main(String[] args) { // `BiConsumer` for formatted output of employee details BiConsumer<String, Double> printEmployeeDetails = (name, salary) -> { System.out.printf("Employee: %-15s | Salary: $%.2f%n", name, salary); }; // Collection of employees with their salaries Map<String, Double> employeeData = new HashMap<>(); employeeData.put("John Smith", 75000.0); employeeData.put("Mary Johnson", 82000.0); employeeData.put("Robert Brown", 64000.0); employeeData.put("Emily Davis", 91000.0); // Print details of each employee System.out.println("Employee Salary Report:"); System.out.println("-----------------------------------"); employeeData.forEach(printEmployeeDetails); } }
Tässä esimerkissä BiConsumer<String, Double> käytetään käsittelemään työntekijän nimeä ja palkkaa, tulostaen tiedot konsoliin muotoillulla tavalla.
forEach()-kokoelman Map-metodi välittää jokaisen avain-arvo-parin BiConsumer, joka suorittaa määritellyn toiminnon kaikille työntekijöille.
BiPredicate<T, U>
BiPredicate on funktionaalinen rajapinta, joka ottaa kaksi argumenttia tyypeistä T ja U ja palauttaa boolean-arvon.
@FunctionalInterface
public interface BiPredicate<T, U> {
boolean test(T t, U u);
}
Sitä käytetään ehtojen tarkistamiseen, joissa tuloksena on boolean-arvo (true tai false), perustuen kahden syötearvon analyysiin.
Esimerkiksi tarkistetaan, onko merkkijonon pituus suurempi kuin annettu luku:
Main.java
1234567891011121314151617package com.example; import java.util.function.BiPredicate; public class Main { public static void main(String[] args) { // `BiPredicate` to check if string length is greater than given number BiPredicate<String, Integer> isStringLongerThan = (str, length) -> str.length() > length; // Example usage String text = "Sample string"; int minLength = 10; boolean result = isStringLongerThan.test(text, minLength); System.out.println("String is longer than " + minLength + " characters: " + result); } }
Tässä esimerkissä BiPredicate<String, Integer> ottaa vastaan kaksi argumenttia: merkkijonon str ja luvun length, joka edustaa vähimmäispituutta. test()-metodi tarkistaa ehdon ja palauttaa true, jos merkkijonon pituus on suurempi kuin määritetty luku, tai muuten false.
1. Mikä metodi on pääasiallinen BiFunction<T, U, R>-rajapinnassa?
2. Mitä accept(T t, U u) -metodi BiConsumer<T, U> -rajapinnassa palauttaa?
3. Mitä rajapintaa käytetään loogisen ehdon tarkistamiseen kahdella argumentilla?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you give examples of how to use these bi-functional interfaces in Java?
What are some common use cases for BiFunction, BiConsumer, and BiPredicate?
How do these bi-interfaces differ from their single-argument counterparts?
Awesome!
Completion rate improved to 2.33
Funktionaalisten Rajapintojen Bi-Versiot
Pyyhkäise näyttääksesi valikon
Javassa on useita funktionaalisten rajapintojen bi-versioita, jotka toimivat kahden argumentin kanssa. Nämä rajapinnat tarjoavat käteviä malleja erilaisten operaatioiden suorittamiseen syöteparilla, oli kyseessä sitten tuloksen laskeminen, toiminnon suorittaminen tai ehdon tarkistaminen.
Ne yksinkertaistavat käsittelyä monimutkaisissa tilanteissa, joissa täytyy työskennellä kahden parametrin kanssa samanaikaisesti.
Esimerkiksi, sen sijaan että kirjoittaisit monimutkaista koodia useilla sisäkkäisillä kutsuilla, voit hyödyntää ytimekkäitä rajapintoja, jotka tarjoavat valmiita metodeja keskeisten toimintojen toteuttamiseen.
BiFunction<T, U, R>
BiFunction on funktionaalinen rajapinta, joka ottaa kaksi syöteparametria tyypeistä T ja U ja palauttaa tuloksen tyyppiä R.
@FunctionalInterface
public interface BiFunction<T, U, R> {
R apply(T t, U u);
}
BiFunction on ihanteellinen tilanteisiin, joissa täytyy käsitellä kahta arvoa ja palauttaa johdettu tulos, kuten laskenta, muunnos tai datan yhdistäminen.
Esimerkiksi, jos täytyy laskea varastossa olevien tuotteiden kokonaiskustannus kertomalla määrä ja yksikköhinta:
Main.java
1234567891011121314151617package com.example; import java.util.function.BiFunction; public class Main { public static void main(String[] args) { // `BiFunction` to calculate total cost BiFunction<Integer, Double, Double> calculateTotalCost = (quantity, pricePerUnit) -> quantity * pricePerUnit; // Example usage int quantity = 50; double pricePerUnit = 19.99; double totalCost = calculateTotalCost.apply(quantity, pricePerUnit); System.out.println("Total cost: $" + totalCost); } }
Tässä esimerkissä BiFunction<Integer, Double, Double> ottaa vastaan kaksi argumenttia: quantity ja pricePerUnit (yksikköhinta), ja palauttaa tuloksen — kokonaiskustannuksen Double-arvona. apply()-metodi suorittaa määritellyn operaation, yhdistäen funktionaalisen rajapinnan kertolaskulogiikkaan.
BiConsumer<T, U>
BiConsumer on funktionaalinen rajapinta, joka ottaa vastaan kaksi argumenttia tyypeistä T ja U, mutta ei palauta tulosta.
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
}
Käytetään toimintojen suorittamiseen kahdelle objektille, kuten lokitietojen kirjaamiseen, tietojen näyttämiseen tai datan tallentamiseen.
Esimerkiksi luodaan funktionaalinen rajapinta, joka ottaa vastaan työntekijän nimen ja palkan, muotoilee tiedot ja tulostaa ne konsoliin:
Main.java
1234567891011121314151617181920212223242526package com.example; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; public class Main { public static void main(String[] args) { // `BiConsumer` for formatted output of employee details BiConsumer<String, Double> printEmployeeDetails = (name, salary) -> { System.out.printf("Employee: %-15s | Salary: $%.2f%n", name, salary); }; // Collection of employees with their salaries Map<String, Double> employeeData = new HashMap<>(); employeeData.put("John Smith", 75000.0); employeeData.put("Mary Johnson", 82000.0); employeeData.put("Robert Brown", 64000.0); employeeData.put("Emily Davis", 91000.0); // Print details of each employee System.out.println("Employee Salary Report:"); System.out.println("-----------------------------------"); employeeData.forEach(printEmployeeDetails); } }
Tässä esimerkissä BiConsumer<String, Double> käytetään käsittelemään työntekijän nimeä ja palkkaa, tulostaen tiedot konsoliin muotoillulla tavalla.
forEach()-kokoelman Map-metodi välittää jokaisen avain-arvo-parin BiConsumer, joka suorittaa määritellyn toiminnon kaikille työntekijöille.
BiPredicate<T, U>
BiPredicate on funktionaalinen rajapinta, joka ottaa kaksi argumenttia tyypeistä T ja U ja palauttaa boolean-arvon.
@FunctionalInterface
public interface BiPredicate<T, U> {
boolean test(T t, U u);
}
Sitä käytetään ehtojen tarkistamiseen, joissa tuloksena on boolean-arvo (true tai false), perustuen kahden syötearvon analyysiin.
Esimerkiksi tarkistetaan, onko merkkijonon pituus suurempi kuin annettu luku:
Main.java
1234567891011121314151617package com.example; import java.util.function.BiPredicate; public class Main { public static void main(String[] args) { // `BiPredicate` to check if string length is greater than given number BiPredicate<String, Integer> isStringLongerThan = (str, length) -> str.length() > length; // Example usage String text = "Sample string"; int minLength = 10; boolean result = isStringLongerThan.test(text, minLength); System.out.println("String is longer than " + minLength + " characters: " + result); } }
Tässä esimerkissä BiPredicate<String, Integer> ottaa vastaan kaksi argumenttia: merkkijonon str ja luvun length, joka edustaa vähimmäispituutta. test()-metodi tarkistaa ehdon ja palauttaa true, jos merkkijonon pituus on suurempi kuin määritetty luku, tai muuten false.
1. Mikä metodi on pääasiallinen BiFunction<T, U, R>-rajapinnassa?
2. Mitä accept(T t, U u) -metodi BiConsumer<T, U> -rajapinnassa palauttaa?
3. Mitä rajapintaa käytetään loogisen ehdon tarkistamiseen kahdella argumentilla?
Kiitos palautteestasi!