Avatar ·

Was bedeutet der Operator "::" (Doppelpunkt) in Java 8?

Hallo zusammen! Ich lerne Java 8 und bin auf eine seltsame Syntax mit dem Doppelpunkt "::" gestoßen. Ich habe es in Beispielen mit Lambda-Ausdrücken gesehen, verstehe aber nicht, was es genau macht und wann man es anwenden soll. Zum Beispiel weiß ich, wie man ein Lambda zum Filtern einer Liste von Strings nach Länge schreibt:
List<String> list = Arrays.asList("a", "bb", "ccc");
list.stream().filter(s -> s.length() > 1).forEach(s -> System.out.println(s));
Aber dann habe ich diesen Code gesehen:
list.stream().filter(s -> s.length() > 1).forEach(System.out::println);
Hier steht statt `s -> System.out.println(s)` einfach `System.out::println`. Was ist das für eine Magie? Ist das dasselbe? Warum kann man nicht einfach ein Lambda verwenden? Und wie erkennt man, wann man `::` schreiben kann und wann nicht? Kannst du mir bitte erklären, wie dieser Operator funktioniert und was der Unterschied zu gewöhnlichen Lambda-Ausdrücken ist?