logo

Java funkcionālās saskarnes

Funkcionāls Java interfeiss ir interfeiss, kas satur tikai vienu abstraktu metodi. Funkcionālajām saskarnēm var būt vairākas noklusējuma vai statiskas metodes, bet tikai viena abstraktā metode.

Sākot ar Java 8, lambda izteiksmes un metožu atsauces var izmantot, lai attēlotu funkcionāla interfeisa gadījumu.

Piemērs: Funkcionālā interfeisa izmantošana ar Lambda izteiksmi

Java
public class Geeks {    public static void main(String[] args) {    // Using lambda expression to implement Runnable  new Thread(() -> System.out.println('New thread created')).start();  } } 

Izvade
New thread created 

Paskaidrojums:



vlc multivides atskaņotāja lejupielāde youtube
  • Iepriekš minētā programma parāda lambda izteiksmes izmantošanu ar Runnable funkcionālo saskarni.
  • Runnable ir viena abstrakta metode run(), tāpēc tā tiek kvalificēta kā funkcionāls interfeiss.
  • Lambda ()-> System.out.println ('Izveidots jauns pavediens') definē run() metodi.
  • new Thread().start() sāk jaunu pavedienu, kas izpilda lambda pamattekstu

Piezīme:

A f unctional interfeiss var arī paplašināt citu funkcionālu interfeisu.

@FunctionalInterface Anotācija

@FunctionalInterface anotācija tiek izmantota, lai nodrošinātu, ka funkcionālajā saskarnē nevar būt vairāk par vienu abstraktu metodi. Ja ir vairākas abstraktas metodes, kompilators atzīmē ziņojumu “Negaidīta @FunctionalInterface anotācija”. Tomēr šīs anotācijas izmantošana nav obligāta.

Piezīme:

@FunctionalInterface anotācija nav obligāta, taču tā ir laba prakse. Tas palīdz novērst kļūdu agrīnā stadijā, pārliecinoties, ka saskarnei ir tikai viena abstrakta metode.

Piemērs: funkcionālās saskarnes definēšana ar @FunctionalInterface anotāciju

Java
@FunctionalInterface interface Square {  int calculate(int x); } class Geeks {  public static void main(String args[]) {  int a = 5;  // lambda expression to define the calculate method  Square s = (int x) -> x * x;  // parameter passed and return type must be same as defined in the prototype  int ans = s.calculate(a);  System.out.println(ans);  } } 

Izvade
25 

Paskaidrojums :

  • Kvadrāts ir funkcionāls interfeiss ar vienu aprēķinu metodi (int x).
  • Aprēķinu metodes ieviešanai tiek izmantota lambda izteiksme (int x) -> x * x.
  • Lambda izmanto x kā ievadi un atgriež x * x.

Java funkcionālās saskarnes pirms Java 8

Pirms Java 8 mums bija jāizveido anonīmi iekšējās klases objekti vai jāievieš šīs saskarnes. Tālāk ir parādīts piemērs tam, kā palaist saskarne tika ieviesta pirms lambda izteiksmju ieviešanas.

Piemērs: Java programma funkcionālā interfeisa demonstrēšanai

Java
class Geeks {  public static void main(String args[]) {    // create anonymous inner class object  new Thread(new Runnable() {  @Override public void run()  {  System.out.println('New thread created');  }  }).start();  } } 

Izvade
New thread created 

Iebūvētas Java funkcionālās saskarnes

Kopš Java SE 1.8 ir daudz saskarņu, kas tiek pārveidotas par funkcionālām saskarnēm. Visas šīs saskarnes ir anotētas ar @FunctionalInterface. Šīs saskarnes ir šādas:

  • Darbināms: Šis interfeiss satur tikai palaist () metodi.
  • Salīdzināms: Šajā saskarnē ir ietverta tikai metode salīdzinātTo().
  • ActionListener: Šajā saskarnē ir ietverta tikai metode actionPerformed().
  • Zvanāms: Šajā interfeisā ir tikai call() metode.

Funkcionālo saskarņu veidi Java

Java SE 8 ietvēra četrus galvenos funkcionālo saskarņu veidus, kurus var izmantot vairākās situācijās, kā minēts tālāk:

  1. Patērētājs
  2. Predikāts
  3. Funkcija 
  4. Piegādātājs

1. Patērētājs 

The patērētāja saskarne funkcionālā saskarne ir tā, kas pieņem tikai vienu argumentu vai ģentrificētu argumentu. Patērētāja saskarnei nav atdeves vērtības. Tas neko neatdod. Ir arī Patērētāja funkcionālie varianti DoubleConsumer IntConsumer un LongConsumer . Šie varianti pieņem primitīvas vērtības kā argumentus. 

Izņemot šos variantus, ir arī vēl viens patērētāja saskarnes variants, kas pazīstams kā Divpatērētājs

Sintakse:

Patērētājs patērētājs = (vērtība) -> System.out.println(vērtība);

Šī Java Consumer funkcionālās saskarnes ieviešana izdrukā vērtību, kas nodota kā parametrs drukas priekšrakstam. Šajā implementācijā tiek izmantota Java Lambda funkcija.

2. Predikāts 

The Predikātu saskarne apzīmē viena argumenta Būla vērtību. To parasti izmanto filtrēšanas darbībām straumēs. Tāpat kā patērētāju funkcionālajam interfeisam Predicate funkcionālajam interfeisam ir arī daži paplašinājumi. Šīs ir IntPredicate DoublePredicate un LongPredicate . Šāda veida predikātu funkcionālās saskarnes kā argumentus pieņem tikai primitīvus datu tipus vai vērtības.  

Sintakse: 

publiska saskarne Predikāts{
   Būla tests(T t);
}

Java predikātu funkcionālo interfeisu var ieviest arī, izmantojot Lambda izteiksmes.

Predikāts predikāts = (vērtība) -> vērtība != null;

sakārtot pēc nejaušības principa SQL

3. Funkcija

A funkciju ir Java funkcionālas saskarnes veids, kas saņem tikai vienu argumentu un atgriež vērtību pēc nepieciešamās apstrādes. Daudzas dažādas funkciju saskarņu versijas ir instrumentālas, un tās parasti izmanto primitīvos veidos, piemēram, double int long.

Sintakse:

Funkcija funkcija = (vērtība) -> vērtība * vērtība;

  • Divfunkcija: The Divfunkcija ir būtiski saistīts ar funkciju. Turklāt tam ir nepieciešami divi argumenti, savukārt funkcija pieņem vienu argumentu. 
  • Unārais operators un binārais operators: Ir arī divas citas funkcionālās saskarnes, kas tiek nosauktas kā Unārs operators un Binārais operators. Tie abi paplašina funkciju un divfunkciju attiecīgi, ja gan ievades veids, gan izvades veids ir vienāds.

4. Piegādātājs

The Piegādātājs funkcionālais interfeiss ir arī funkcionālas saskarnes veids, kas neizmanto nekādu ievadi vai argumentu un tomēr atgriež vienu izvadi. Piegādātāja funkcionālās saskarnes dažādie paplašinājumi nodrošina daudzas citas piegādātāja funkcijas, piemēram BooleanSupplier DoubleSupplier LongSupplier un IntSupplier . Visu šo turpmāko specializāciju atgriešanās veids ir tikai tiem atbilstošie primitīvie. 

Sintakse:

Piegādātājspiegādātājs = () -> 'Sveika pasaule!';

Piemērs: Predikātu interfeisa izmantošana virkņu filtrēšanai

Java
import java.util.*; import java.util.function.Predicate; class Geeks {  public static void main(String args[]) {    // create a list of strings  List<String> n = Arrays.asList('Geek' 'GeeksQuiz' 'g1' 'QA' 'Geek2');  // declare the predicate type as string and use lambda expression to create object  Predicate<String> p = (s) -> s.startsWith('G');  // Iterate through the list  for (String st : n) {    // call the test method  if (p.test(st))  System.out.println(st);  }  } } 

Izvade
Geek GeeksQuiz Geek2 

Funkcionālo saskarņu tabula

Funkcionālās saskarnes

Apraksts

Metode

Palaist

java struktūra

Tas apzīmē uzdevumu, ko var izpildīt, izmantojot pavedienu.

tukša palaišana ()

Salīdzināms

Tas salīdzina divus objektus pasūtīšanai.

int salīdzinātTo(T o)

ActionListener

Tas apstrādā darbības notikumu notikumu virzītā programmēšanā.

anulēta darbībaVeikts(ActionEvent e)

Sazvanāms

Tas apzīmē uzdevumu, kas var atgriezt rezultātu vai radīt izņēmumu.

V call() met Izņēmums

Patērētājs

Tas pieņem vienu ievades argumentu un neatgriež rezultātu.

anulēt pieņemt (T t)

Predikāts

Tas pieņem vienu argumentu un atgriež Būla rezultātu.

Būla tests (T t)

Funkcija

Tas pieņem vienu argumentu un atgriež rezultātu.

R pieteikties (T t)

alfa beta atzarošanas piemērs

Piegādātājs

Tas neprasa nekādus argumentus, bet sniedz rezultātu.

Saņemt ()

BiPatērētājs

Tas pieņem divus argumentus un neatgriež rezultātu.

anulēts pieņemt (T t U u)

BiPredicate

Tas pieņem divus argumentus un atgriež Būla rezultātu.

Būla tests (T t U u)

BiFunction

Tas pieņem divus argumentus un atgriež rezultātu.

Pieteikties (T t U u)

java char uz veselu skaitli

UnaryOperator

Šis ir īpašs funkcijas gadījums, kad ievades un izvades veidi ir vienādi.

T pieteikties (T t)

Binārais operators

Šis ir īpašs BiFunction gadījums, kad ievades un izvades veidi ir vienādi.

T piemērot (T t1 T t2)

Saistītie raksti

  • Java 8
  • Java Lambda izteiksmes