21

In the following code sample what does the :: do:

public static void main(String[] args) {

    List<Integer> l = Arrays.asList(1,2,3,4,5,6,7,8,9,10);      

    Integer s = l.stream().filter(Tests::isGT1)
                         .filter(Tests::isEven)
                         .map(Tests::doubleIt)
                         .findFirst()
                         .orElse(100);          
    System.out.println(s);      
}


private static boolean isGT3(int number){
    return number > 3;
}

private static boolean isEven(int number){
    return number % 2 ==0;
}       
private static int doubleIt(int number){
    return number * 2;
}
Ole
  • 41,793
  • 59
  • 191
  • 359
a_z
  • 342
  • 1
  • 3
  • 14

1 Answers1

47

These are method references. It's just a simpler way to write a lambda expression:

.map(Tests::doubleIt)

is equivalent to

.map(i -> Tests.doubleIt(i))

You can also refer to instance methods using someObject::someMethod, or even to constructors using SomeClass::new.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255