我的intelij向我展示了我可以用方法参考替换lambda .filter(bean -> bean != null)
。当我有一个方法或具有方法的对象时,这对我来说是显而易见的。但是如何在!= null
上参考,是否有某种isNull()
方法的类?
这是Objects::nonNull
API存在的确切原因:
.filter(Objects::nonNull);
是的,当然是;您可以使用Objects::nonNull
API。
package com.logicbig.example.objects;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class NonNullExample {
public static void main(String... args) {
List<String> list = Arrays.asList(null, null, "first_element", "second_element", null);
list = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(list);
}
}
从评论移至答案
当然,正如Aomine所说,您可以使用Objects::nonNull
。
但是对于没有可用功能的代码,我认为知道您可以在lambda表达式中使用很多东西很有用。您可以使用代码块,也可以按照lambda的合同编写一个简单的方法并传递对该方法的引用。
class Test {
public static void main(String[] args){
Stream<Object> stream = ...;
// lambda from code block
stream.filter(bean -> {return bean != null;});
Predicate<Object> p1 = o -> {return o != null;};
// which resolves to the below
Predicate<Object> p2 = new Predicate<>() {
@Override public boolean test(Object o) {
return o != null;
}
};
// or pass your own method that can resolve to the correct functional class
stream.filter(Test::myPredicateTest);
}
// meets the contract of a Predicate<Object>.test(Object o) returning boolean
public static boolean myPredicateTest(Object o) {
return o != null;
}
}