Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 8 Method References: Methoden als Werte weiterreichen (:: Operator)

Was sind Method References?

Ein Method Reference (::) ist eine kompakte Schreibweise für Lambdas, die nur eine existierende Methode aufrufen. Statt x -> System.out.println(x) schreiben Sie System.out::println.

Vier Arten von Method References

Art Syntax Beispiel Entspricht Lambda
Static Method Klasse::staticMethode Integer::parseInt s -> Integer.parseInt(s)
Instance Method (bestimmtes Objekt) objekt::instanzMethode System.out::println x -> System.out.println(x)
Instance Method (beliebiges Objekt eines Typs) Klasse::instanzMethode String::toUpperCase s -> s.toUpperCase()
Constructor Klasse::new ArrayList::new () -> new ArrayList()

Beispiel: Liste ausgeben

import java.util.*;

public class MethodRefDemo {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Anna", "Bernd", "Clara");

        // Static method reference
        names.forEach(System.out::println);

        // Instance method of arbitrary object (String::toUpperCase)
        List<String> upper = names.stream()
            .map(String::toUpperCase)
            .collect(Collectors.toList());
        System.out.println(upper); // [ANNA, BERND, CLARA]

        // Constructor reference
        List<ArrayList<String>> lists = names.stream()
            .map(n -> new ArrayList<String>()) // Lambda nötig, da Parameter
            .collect(Collectors.toList());
        // Oder mit Supplier:
        List<ArrayList<String>> lists2 = Collections.nCopies(3, null).stream()
            .map(ArrayList::new) // () -> new ArrayList()
            .collect(Collectors.toList());
    }
}

Constructor References mit Parametern

Für Konstruktoren mit Argumenten benötigen Sie ein passendes Functional Interface:

@FunctionalInterface
interface StringListFactory {
    List<String> create(int initialCapacity);
}

StringListFactory factory = ArrayList::new; // ArrayList(int)
List<String> list = factory.create(100);

Method References in Streams

List<String> list = List.of("a", "bb", "ccc");

// map: Instanzmethode beliebigen Objekts
list.stream().map(String::length).forEach(System.out::println); // 1, 2, 3

// filter: Prädikat als Method Reference (static)
list.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());

// sort: Comparator via Method Reference
list.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList());

Wann Method Reference, wann Lambda?

Fazit

Method References sind syntaktischer Zucker für häufige Lambda-Patterns. Sie verbessern Lesbarkeit und machen funktionalen Code noch deklarativer. Beherrschen Sie die vier Formen – sie sind allgegenwärtig in modernem Java-Code.

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  3. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  4. Java String length() Methode: String-Länge ermitteln (Beispiel)
  5. Java String.indexOf() meistern: Substrings finden & praktische Beispiele
  6. Java String.charAt(): Syntax, Rückgabetyp, Exceptions und praktisches Beispiel
  7. Java String compareTo() meistern: Syntax, Anwendungsfälle und praktische Beispiele
  8. Java String.contains() Methode: Substrings prüfen – praktische Beispiele
  9. Java String.endsWith(): String-Suffixe prüfen mit Beispielen
  10. Java String-Ersetzung meistern: replace(), replaceAll() und replaceFirst() erklärt