2014-11-19 16 views

Antwort

19

Dies ist eine Methodenreferenz. Hinzugefügt in Java 8.

TreeSet::new bezieht sich auf den Standardkonstruktor von TreeSet.

Im Allgemeinen bezieht sich auf Verfahren A::BB in Klasse A.

+2

+1, Was werden sie als nächstes denken? String Schalt vielleicht ... Schnittstellen mit Methoden ... – Bathsheba

+2

@Bathsheba, ich meine Finger für Betreiber Überlastung überqueren. – ChiefTwoPencils

+2

@ChiefTwoPencils Vor allem, wenn sie definieren auch ',' als Operator. –

8

:: wird Methode Referenz genannt. Es ist im Grunde ein Verweis auf eine einzige Methode. es bezieht sich auf eine existierende Methode nach Namen.

Method reference using :: ist ein Komfort Operator.

Methodenreferenz ist eine der Funktionen Java lambda expressions gehören. Verfahren Referenz kann mit dem üblichen Lambda-Ausdruck Syntaxformat ausgedrückt wird unter Verwendung von –> Um es einfacher zu machen :: Operator verwendet werden kann.

Beispiel:

public class MethodReferenceExample { 
    void close() { 
     System.out.println("Close."); 
    } 

    public static void main(String[] args) throws Exception { 
     MethodReferenceExample referenceObj = new MethodReferenceExample(); 
     try (AutoCloseable ac = referenceObj::close) { 
     } 
    } 
} 

So, In Ihrem Beispiel:

Set<String> set = people.stream() 
         .map(Person::getName) 
         .collect(Collectors.toCollection(TreeSet::new)); 

ruft/Schaffung eines 'neuen' TreeSet.

Ein ähnliches Beispiel eines Contstructor Referenz Code:

class Zoo { 
    private List animalList; 
    public Zoo(List animalList) { 
     this.animalList = animalList; 
     System.out.println("Zoo created."); 
    } 
} 

interface ZooFactory { 
    Zoo getZoo(List animals); 
} 

public class ConstructorReferenceExample { 

    public static void main(String[] args) { 
     //following commented line is lambda expression equivalent 
     //ZooFactory zooFactory = (List animalList)-> {return new Zoo(animalList);};  
     ZooFactory zooFactory = Zoo::new; 
     System.out.println("Ok");  
     Zoo zoo = zooFactory.getZoo(new ArrayList()); 
    } 
} 
4

Person :: getName in diesem Zusammenhang ist eine Abkürzung für (Person p) -> p.getName()

Weitere Beispiele und eine ausführliche Erläuterungen in JLS section 15.13