:: Java运算符在这种情况下做了什么?

时间:2015-06-07 13:05:47

标签: java-8

在以下代码示例中,::执行了什么操作:

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;
}

1 个答案:

答案 0 :(得分:40)

这些是method references。这只是编写lambda expression的简单方法:

.map(Tests::doubleIt)

相当于

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

您还可以使用someObject::someMethod引用实例方法,甚至使用SomeClass::new引用构造函数。