Глядя на ваш конвейер:
return listOfPossibleHaircuts.stream().filter(p->p.getParameterDetailId().intValue()==object.getInfo().get("HAIR_STYLE").intValue() ).map(ParameterDetail::getParameterValue).collect(Collectors.toList()).get(0);
Чтобы избежать исключений, вы должны убедиться, что:
p.getParameterDetailId()
не равно нулю getParameterValue
не возвращает ноль - Список, возвращаемый этим конвейером, не является пустым
Я предлагаю:
return listOfPossibleHaircuts.stream()
.filter(p->p.getParameterDetailId() != null)
.filter(p->p.getParameterDetailId().equals(object.getInfo().get("HAIR_STYLE")))
.map(ParameterDetail::getParameterValue)
.filter(Objects::nonNull)
.findFirst();
Это вернет Optional<TheTypeReturnedBygetParameterValue>
.
Не стесняйтесь снимать любые ненужные чеки null
(если getParameterDetailId
или getParameterValue
никогда не вернется null
).
Вы также можете подключиться к findFirst()
.get()
, если вы уверены, что List
не будет пустым.
Мое решение предполагает, что object.getInfo().get("HAIR_STYLE") != null
.Это можно проверить перед запуском конвейера Stream
, и, как прокомментировал Хольгер, его можно использовать для упрощения фильтрации:
Object result = null;
Object style = object.getInfo().get("HAIR_STYLE");
if (style != null) {
result = listOfPossibleHaircuts.stream()
.filter(p->style.equals(p.getParameterDetailId()))
.map(ParameterDetail::getParameterValue)
.filter(Objects::nonNull)
.findFirst()
.orElse(null);
}
return result;
Я сделал еще одно небольшое предположение - конвейер Stream
не долженбудет выполнено вообще, если object.getInfo().get("HAIR_STYLE") == null
.