Java-Interviewfragen (Serie) – Lambda-Ausdrücke

Weniger ist mehr, wenn es um Java geht! 💯

Knapp

Nachverfolgung der vorherigen Postheute behandeln wir:

🔸 Was ist ein lambda expression?

🔸 Die Beziehung zwischen lambda und Functional Interfaces

🔸 Die Beziehung zwischen lambda und Streams

🔸 Umsetzungsbeispiele.

Implementierung

🔵 Die lambda Ausdruck wird verwendet, um die Implementierung einer funktionalen Schnittstelle bereitzustellen.

Der Hauptvorteil davon ist, dass es eine Menge Code reduziert, der für die Bereitstellung der Implementierung benötigt wird.

Mal sehen, wie Sie es tun können! 👀

1️⃣ Zunächst benötigen Sie eine funktionsfähige Schnittstelle. Wenn Sie besser verstehen möchten, was es ist und wie es funktioniert, schauen Sie sich das an dieser Beitrag!

@FunctionalInterface
public interface Accumulator {
    int add(int x, int y);
}

Akkumulator.java

2️⃣ Implementieren Sie die Schnittstelle.

Weitere Beiträge wie diesen finden Sie auf new-spike.net! 🚀

Notiz

Wenn Sie vor Java 8 keine separate Klasse haben wollten, die Ihre Schnittstelle implementiert, konnten Sie dies mit einer anonymen Klasse tun.

int x = 10;
  int y = 15;
  
  // anonymous class
  Accumulator accumulator = new Accumulator() {
  	@Override
  	public int add(int x, int y) {
 		 return x + y;
  	}
  };

  int result = accumulator.add(x, y); // result = 35

Anwendung.java

🚀 Von Java 8 forward können Sie die funktionale Schnittstelle mithilfe eines Lambda-Ausdrucks schneller und lesbarer implementieren.

int x = 15;
  int y = 20;
  
  // lambda expression
  Accumulator accumulator = (x1, y1) -> x1 + y1; // implementation of the interface method

  int result = accumulator.add(x,y); // result = 35

Anwendung.java

Ein weiterer wichtiger Unterschied zwischen a lambda und ein anonymous class ist, dass der Java-Compiler für letzteres tatsächlich eine separate erstellt .class Datei so, wie es für eine übliche Klasse wäre, die die Schnittstelle implementiert.

Während die lambda Ausdruck wird wie eine einfache Methode behandelt.

Weitere Beiträge wie diesen finden Sie auf new-spike.net! 🚀

🤝 Sie werden auch Lambda-Ausdrücke finden, die Hand in Hand mit arbeiten Streams.

Sie können Änderungen an Elementen im Stream vornehmen, einige davon herausfiltern und vieles mehr.

🔹 Lass mich dir ein Beispiel geben.

List<Integer> inputList = new ArrayList<>();
  inputList.add(1);
  inputList.add(2);
  inputList.add(3);
  inputList.add(4);
  inputList.add(5);

  List<Integer> filteredList = inputList.stream()
    .filter(item -> item % 2 == 0) // lambda expression returning true for odd items
    .collect(Collectors.toList()); 
    
  // filteredList = { 2, 4 }

🔹 Außerdem muss der Lambda-Block nicht nur eine einzige Zeile lang sein.

List<Integer> inputList = new ArrayList<>();
  inputList.add(1);
  inputList.add(2);
  inputList.add(3);
  inputList.add(4);
  inputList.add(5);
        
  inputList.forEach(item -> {
              item++;
              System.out.println("Updated item: " + item);
          });
          
  // Result:       
  // Updated item2
  // Updated item3
  // Updated item4
  // Updated item5
  // Updated item6

Anwendung.java

👍 Die Faustregel lautet jedoch: Wenn Sie mehrere Zeilen in einem Lambda-Ausdruck benötigen, extrahieren Sie ihn in einer privaten Methode.

public class Calculator {

    public static void calculate() {
    	List<Integer> inputList = new ArrayList<>();
    	inputList.add(1);
    	inputList.add(2);
    	inputList.add(3);
        inputList.add(4);
        inputList.add(5);

        inputList.forEach(item -> extracted(item));
    }

    private static void extracted(Integer item) {
        item++;
        System.out.println("Updated item: " + item);
    }
 }

🧠 Oder noch besser, der Compiler kann anhand der Methodensignatur herausfinden, was Sie zu tun versuchen.

Das bedeutet, dass Sie die Methode aufrufen können, indem Sie einfach den Klassennamen zusammen mit dem Methodennamen übergeben.

public class Calculator {

    public static void calculate() {
    	List<Integer> inputList = new ArrayList<>();
    	inputList.add(1);
    	inputList.add(2);
    	inputList.add(3);
        inputList.add(4);
        inputList.add(5);

        inputList.forEach(Calculator::extracted); // lambda using method reference
    }

    private static void extracted(Integer item) {
        item++;
        System.out.println("Updated item: " + item);
    }
 }

Rechner.java

Verpassen Sie keine weiteren Beiträge wie diesen! Abonnieren Sie unseren kostenlosen Newsletter!

Weitere Beiträge wie diesen finden Sie auf new-spike.net! 🚀

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *