我有以下片段收集具有包含特定過濾器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