根据:
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
它看起来很可能,但是尝试实际返回编译错误。 由于我们无法使用静态方法实现接口,因此它应该是不可能的更有意义。
public class SomeClass {
static public boolean getB(){
return false;
}
}
List<SomeClass> list = new ArrayList<>();
list.add(new SomeClass());
// below causes compile error, which I expect, however documentation indicates oherwise
list.stream().filter(SomeClass::getB).collect(Collectors.toList());
这是编译错误:
&#34;此行有多个标记 - 应该以静态方式访问SomeClass类型的方法getB() - Stream类型中的方法过滤器(Predicate)不适用于 arguments(SomeClass :: getB)&#34;
答案 0 :(得分:6)
您可以,但方法的返回类型和参数必须与功能接口的唯一方法(此处为Predicate<Something>
)匹配。
假设您的列表是List<Something>
,因为谓词应该返回基于Something
作为输入的布尔值,如果您的方法被定义为
public static boolean getB(Something s)
或
public static boolean getB(Object o)