Temos uma lista de itens SomeType a partir do qual gostaríamos de recuperar um item em particular, executar uma verificação sobre esse item (filtro), e se os critérios for cumprida, em seguida, recuperar um campo de tipo String especial do item (mapa), todos em uma expressão
As interfaces do método em causa são as seguintes. Tudo está indo bem até a última etapa, onde gostaríamos de mapear o resultado do filtro Optional<SomeType>
em Optional<String>
. Infelizmente não somos capazes de pregar a sintaxe esperada pelo chamado mapa
public Optional<String> transform(final List<SomeType> aList)
return getAnItemFromTheList(aList)
.filter(someFilterClass::anItemFulfillsCriteria)
.map(???use getAStringTypeFieldFromTheItem() here???);
private Optional<SomeType> getAnItemFromTheList(final List<SomeType> aList) {...
public boolean anItemFulfillsCriteria(final SomeType anItem) {... //in a separate class of filter methods
private Optional<String> getAStringTypeFieldFromTheItem(final SomeType anItem) {...
Bem, se eu entendi corretamente que getAStringTypeFieldFromTheItem
irá retornar uma Optional<String>
, assim que você vai acabar com Optional<Optional<String>>
após o map
; assim, é só usar flatMap
em vez de map
para conseguir que Optional<String>
, como resultado