English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java-Grundlagen-Tutorial

Java Flusskontrolle

Java Array

Java objektorientiert (I)

Java objektorientiert (II)

Java objektorientiert (III)

Java-Exception-Verarbeitung

Java Liste (List)

Java Queue (Warteschlange)

Java Map-Kollektion

Java Set-Kollektion

Java Eingabe-Ausgabe (I/O)

Java Reader/Writer

Andere Themen in Java

Java 8 Funktionale Schnittstelle

Java 8 Neue Funktionen

Funktionale Schnittstelle (Functional Interface) ist eine Schnittstelle, die genau eine abstrakte Methode hat, aber auch mehrere nicht-abstrakte Methoden haben kann.

Funktionale Schnittstellen können in Lambda-Ausdrucksformen implizit umgewandelt werden.

Lambda-Ausdrucksformen und Methodenbezug (es kann auch als Lambda-Ausdrucksformel betrachtet werden).

Wie eine funktionale Schnittstelle definiert, siehe unten:

@FunctionalInterface
interface GreetingService 
{
    void sayMessage(String Nachricht);
}

Dann kann eine Lambda-Ausdrucksformel verwendet werden, um eine Implementierung dieser Schnittstelle darzustellen (Anmerkung: JAVA 8 Bisher wurde dies in der Regel durch eine anonyme Klasse implementiert):

GreetingService greetService1 = Nachricht -> System.out.println("Hello ")} + message);

funktionale Schnittstellen unterstützen die Lambda-Funktionen der bestehenden Funktionen freundlich.

JDK 1.8 früher vorhandene funktionalen Schnittstellen:

  • java.lang.Runnable

  • java.util.concurrent.Callable

  • java.security.PrivilegedAction

  • java.util.Comparator

  • java.io.FileFilter

  • java.nio.file.PathMatcher

  • java.lang.reflect.InvocationHandler

  • java.beans.PropertyChangeListener

  • java.awt.event.ActionListener

  • javax.swing.event.ChangeListener

JDK 1.8 neu hinzugefügte funktionalen Schnittstellen:

  • java.util.function

java.util.function Es enthält viele Klassen, um die funktionalen Programmierstile in Java zu unterstützen, die funktionalen Schnittstellen in diesem Paket sind:

NummerInterface & Beschreibung
1BiConsumer<T,U>

stellt eine Operation dar, die zwei Eingangsparameter akzeptiert und kein Ergebnis zurückgibt

2BiFunction<T,U,R>

stellt eine Methode dar, die zwei Eingangsparameter akzeptiert und ein Ergebnis zurückgibt

3BinaryOperator<T>

stellt eine Operation dar, die auf zwei gleichartige Operatoren wirkt und ein gleichartiges Ergebniss zurückgibt

4BiPredicate<T,U>

stellt eine boolean-Wertmethoden mit zwei Parametern dar

5BooleanSupplier

stellt den Anbieter eines boolean-Wertergebnisses dar

6Consumer<T>

stellt eine Operation dar, die einen Eingangsparameter akzeptiert und kein Ergebnis zurückgibt

7DoubleBinaryOperator

stellt eine Operation dar, die auf zwei double-Wertoperatoren wirkt und ein double-Wertergebnis zurückgibt.

8DoubleConsumer

stellt eine Operation dar, die einen double-Parameter akzeptiert und kein Ergebnis zurückgibt.

9DoubleFunction<R>

stellt eine Methode dar, die einen double-Parameter akzeptiert und ein Ergebnis zurückgibt

10DoublePredicate

stellt einen boolean-Wertmethoden mit double-Parameter dar

11DoubleSupplier

stellt den Anbieter einer double-Wertstruktur dar

12DoubleToIntFunction

Erfolgt die Übernahme eines Parameters vom Typ double und liefert ein Ergebnis vom Typ int zurück.

13DoubleToLongFunction

Erfolgt die Übernahme eines Parameters vom Typ double und liefert ein Ergebnis vom Typ long zurück.

14DoubleUnaryOperator

Nimmt einen Parameter vom Typ double an und liefert ein Ergebnis vom Typ double zurück.

15Function<T,R>

Erfolgt die Übernahme eines Inputparameters und liefert ein Ergebnis zurück.

16IntBinaryOperator

Erfolgt die Übernahme beider Parameter vom Typ int und liefert ein Ergebnis vom Typ int zurück.

17IntConsumer

Nimmt einen int-Typ-Inputparameter an, ohne Rückgabewert.

18IntFunction<R>

Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis zurück.

19IntPredicate

Nimmt einen int-Inputparameter an und liefert ein Ergebnis vom Typ boolean zurück.

20IntSupplier

Ohne Parameter, liefert ein Ergebnis vom Typ int zurück.

21IntToDoubleFunction

Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ double zurück.

22IntToLongFunction

Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ long zurück.

23IntUnaryOperator

Erfolgt die Übernahme eines Parameters vom Typ int und liefert ein Ergebnis vom Typ int zurück.

24LongBinaryOperator

Erfolgt die Übernahme beider Parameter vom Typ long und liefert ein Ergebnis vom Typ long zurück.

25LongConsumer

Erfolgt die Übernahme eines Parameters vom Typ long, ohne Rückgabewert.

26LongFunction<R>

Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein Ergebnis zurück.

27LongPredicate

R nimmt einen long-Inputparameter an und liefert ein Ergebnis vom Typ boolean zurück.

28LongSupplier

Ohne Parameter, liefert einen Wert vom Typ long zurück.

29LongToDoubleFunction

Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein double-Typ-Ergebnis zurück.

30LongToIntFunction

Erfolgt die Übernahme eines Parameters vom Typ long und liefert ein int-Typ-Ergebnis zurück.

31LongUnaryOperator

Erfolgt die Übernahme eines Parameters vom Typ long und liefert einen Wert vom Typ long zurück.

32ObjDoubleConsumer<T>

Erfolgt die Übernahme eines Objekts und eines double-Typ-Parameters, ohne Rückgabewert.

33ObjIntConsumer<T>

Erfolgt die Übernahme eines Objekts und eines int-Typ-Parameters, ohne Rückgabewert.

34ObjLongConsumer<T>

Akzeptiert ein object-Typ- und ein long-Typ-Eingangsparameter und gibt kein Ergebnis zurück.

35Predicate<T>

Akzeptiert einen Eingangsparameter und gibt ein boolesches Ergebnis zurück.

36Supplier<T>

Keine Parameter, gibt ein Ergebnis zurück.

37ToDoubleBiFunction<T,U>

Akzeptiert zwei Eingangsparameter und gibt ein double-Typ-Ergebnis zurück

38ToDoubleFunction<T>

Akzeptiert einen Eingangsparameter und gibt ein double-Typ-Ergebnis zurück

39ToIntBiFunction<T,U>

Akzeptiert zwei Eingangsparameter und gibt ein int-Typ-Ergebnis zurück.

40ToIntFunction<T>

Akzeptiert einen Eingangsparameter und gibt ein int-Typ-Ergebnis zurück.

41ToLongBiFunction<T,U>

Akzeptiert zwei Eingangsparameter und gibt ein long-Typ-Ergebnis zurück.

42ToLongFunction<T>

Akzeptiert einen Eingangsparameter und gibt ein long-Typ-Ergebnis zurück.

43UnaryOperator<T>

Akzeptiert einen Parameter vom Typ T, gibt auch einen Wert vom Typ T zurück.

Beispiel eines funktionalen Interfaces

Das Predicate <T> Interface ist ein funktionaler Interface, das einen Eingangsparameter T annimmt und ein boolesches Ergebnis zurückgibt.

Dieses Interface enthält verschiedene Standardmethoden, um Predicate zu kombinieren und komplexe Logiken zu erzeugen (z.B.: und, oder, nicht).

Dieses Interface wird verwendet, um zu testen, ob ein Objekt true oder false ist.

Wir können die folgenden Beispiele (Java8um die Verwendung des funktionalen Interfaces Predicate <T> zu verstehen:

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
 
public class Java8Tester {
   public static void main(String args[]){
      List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
        
      // Predicate<Integer> predicate = n ->true
      // n ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird
      // wenn n existiert, gibt die Methode test true zurück
        
      System.out.println("Ausgabe aller Daten:");
        
      // Übergabe des Parameters n
      eval(list, n->true);
        
      // Predicate<Integer> predicate1 = n -> n%2 == 0
      // n ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird
      // wenn n%2 Für 0 gibt die Methode test true zurück
        
      System.out.println("Ausgabe aller geraden Zahlen:");
      eval(list, n-> n%2 == 0 );
        
      // Predicate<Integer> predicate2 = n -> n > 3
      // n ist ein Parameter, der an die test Methode des Predicate Interfaces übergeben wird
      // wenn n größer als 3 test Methode gibt true zurück
        
      System.out.println("Alle Zahlen größer als 3 alle Zahlen:");
      eval(list, n-> n > 3 );
   }
    
   public static void eval(List<Integer> list, Predicate<Integer> predicate) {
      for(Integer n: list) {
        
         if(predicate.test(n)) {
            System.out.println(n + " ");
         }
      }
   }
}

Führen Sie das Skript aus, um die folgenden Ergebnisse zu erhalten:

$ javac Java8Tester.java 
$ java Java8Tester
Alle Daten:
1 
2 
3 
4 
5 
6 
7 
8 
9 
Alle geraden Zahlen:
2 
4 
6 
8 
Alle Zahlen größer als 3 alle Zahlen:
4 
5 
6 
7 
8 
9

Java 8 Neue Funktionen