Olá colegas desenvolvedores Java,
Eu sei que o assunto pode ser um pouco in advance
porque o JDK8 ainda não foi lançado (e não por agora, de qualquer maneira ..) mas eu estava lendo alguns artigos sobre as expressões Lambda e particularmente a parte relacionada à nova API de coleção conhecida como Stream.
Aqui está o exemplo fornecido no artigo da Java Magazine (é um algoritmo de população de lontras ..):
Set<Otter> otters = getOtters();
System.out.println(otters.stream()
.filter(o -> !o.isWild())
.map(o -> o.getKeeper())
.filter(k -> k.isFemale())
.into(new ArrayList<>())
.size());
Minha pergunta é o que acontecerá se no meio da iteração interna Set, uma das lontras for nula?
Eu esperaria que um NullPointerException fosse lançado, mas talvez eu ainda esteja preso no paradigma de desenvolvimento anterior (não funcional), alguém pode me esclarecer como isso deve ser tratado?
Se isso realmente gerar um NullPointerException, considero o recurso bastante perigoso e terá que ser usado apenas como abaixo:
- O desenvolvedor deve garantir que não haja nenhum valor nulo (talvez usando um filtro anterior (o -> o! = Nulo))
- O desenvolvedor deve garantir que o aplicativo nunca está gerando lontra nula ou um objeto NullOtter especial para lidar.
Qual é a melhor opção, ou alguma outra opção?
Obrigado!