Your questions could be answered if you read manual about functional interfaces and lambdas.
Just take a look on difference between lambda expression and usual anonymous class creation. Both variables can be used the same way.
//using anonymous class
Predicate<String> isStringEmptyObj = new Predicate<String>() {
@Override
public boolean test(String o) {
return o.isEmpty();
}
};
System.out.println(isStringEmptyObj.negate().test("asd"));
//using lambda with reference to existing String object method
Predicate<String> isStringEmpty = String::isEmpty;
System.out.println(isStringEmpty.negate().test("asd"));
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…