У меня есть следующий фрагмент, который собирает определенные объекты, у которых есть строковое свойство name
, которое содержит определенный фильтр filterName
.Java 8 streams 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