我的Intelij向我展示了我可以用方法参考替换lambda .filter(bean -> bean != null)
。当我有一个带有方法的类或对象时,对我来说该怎么做。但是如何在!= null
上进行引用,是否有一个具有某种isNull()
方法的类?
答案 0 :(得分:10)
这是Objects::nonNull
API存在的确切原因:
.filter(Objects::nonNull);
答案 1 :(得分:0)
从评论移到答案
当然,正如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;
}
}
答案 2 :(得分:0)
是的,当然;您可以使用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);
}
}