В приведенном ниже коде я хотел бы знать, как я могу перебирать список необязательных объектов? По коду:
OptionalsUtils.toOptional(this.getUser_3())
.flatMap(user->user.getOptUserFavoriteTvList()
.filter(list-> list.get(???) != Optional.empty())
);#
Теперь я хочу сослаться на каждый индекс в списке? как я могу этого добиться?
код:
OptionalsUtils.toOptional(this.getUser_3())
.flatMap(user->user.getOptUserFavoriteTvList()
.filter(list-> list.get(0) != Optional.empty())
);
private User getUser_3() {
List<Optional<String>> list = new ArrayList<>(5);
list.add(Optional.of("espn"));
list.add(Optional.of("Cnn"));
list.add(Optional.empty());
list.add(Optional.of("deutsch welle"));
User user = new User();
user.setUserName("johannas");
user.setUserEmailAddres("[email protected]");
user.setUserId("2005");
user.setUserFavoritesTvList(list);
return user;
}
public Optional<List<String>> getOptUserFavoriteTvList() {
return OptionalsUtils.toOptional(this.getUserFavoriteTvList());
}
Что делает OptionalsUtils.toOptional
? Похоже, вам следует использовать Optional.ofNullable
вместо пользовательского служебного метода.
после flatMap
извлеките список из необязательного, если он присутствует, через orElse
, а затем примените свою логику ...
OptionalsUtils.toOptional(this.getUser_3())
.flatMap(user-> user.getOptUserFavoriteTvList())
.orElse(Collections.emptyList());
после вызова orElse
вы теперь работаете с List<String>
, на котором вы можете вызвать stream()
для выполнения более сложных операций или итерации по нему, используя типичный цикл for и т. д.
вы даже можете использовать ifPresent
, если он больше подходит для вашей задачи.
OptionalsUtils.toOptional(this.getUser_3())
.flatMap(user-> user.getOptUserFavoriteTvList())
.ifPresent(list -> list.forEach(e -> ....));
используйте свой список, используя метод getOptUserFavoriteTvList (), и повторяйте, используя цикл for