Почему в Optional не срабатывает orElse(), orElseGet(), если объект null?
AggregationDescription aggregationLevel = getAggregationDescriptionBYTerm(LEVEL_FIELD, null, null);
Есть функция:
private AggregationDescription getAggregationDescriptionBYTerm(String term, Optional<String> subTerm, Optional<String> script){
AggregationDescription aggregationDescription = subTerm.map(term2 -> {
if(script != null){
return AggregationDescription.builder().term("by_" + term).field(term)
.subAggregationDescription(Arrays.asList(AggregationDescription.builder().term("by_" + term2).field(term2)
.script(script.get()).build())).build();
}
return AggregationDescription.builder().term("by_" + term).field(term)
.subAggregationDescription(Arrays.asList(AggregationDescription.builder().term("by_" + term2).field(term2)
.build())).build();
}).orElseGet( () -> script.map(scrpt ->{
return AggregationDescription.builder().term("by_" + term).script(scrpt).field(term).build();})
.orElseGet(() -> AggregationDescription.builder().term("by_" + term).field(term).build()));
return aggregationDescription;
}
она падает сразу с NullPointException
на строчке:
AggregationDescription aggregationDescription = subTerm.map(term2 -> {
если 2-ой параметр Optional
String subTerm == null
.
Ожидал, что в этом случае будет выполнен код из orElseGet()
, но этого не происходит