我有以下片段收集具有包含特定过滤器filterName
的name
字符串属性的特定对象。Java 8流nonNull在对象的属性
List<Foo> filteredFoo= fooList.stream()
.filter(Objects::nonNull)
.filter(myFoo -> {
if (Strings.isNullOrEmpty(myFoo.getName()))
return false;
return myFoo.getName().contains(filterName);
}
).collect(Collectors.toList());
它按预期工作,但我不知道是否有写if-statement
以功能性的方式并以更好的方式检查空或空的属性,不必在过滤条件块一个更优雅的方式。
我很困惑。你已经决定'Objects :: nonNull'需要成为一个单独的过滤器,但其他的一切都需要在一个单独的过滤器中。为什么? – zeroflagL
@zeroflagL它是为了可读性目的而完成的,对象:nonNull在第二个过滤器作用于对象本身属性的对象级别上工作。我不知道这是否对性能有影响,但为了可读性,我认为这很有用。 –
这就是我的观点:如果你为可读性而努力,那么为什么你有一个复杂的第二个过滤器,而不是单独的,也许是可重用的过滤器,比如'Foo :: hasName',例如? – zeroflagL