У меня есть некоторые проблемы с использованием оператора Optional.ifPresent
. Я хотел бы уменьшить количество NullPointerExceptions
, поэтому я решил использовать Optional
значения.
Также я стараюсь избегать лестничных от if
заявлений против паттерна.
Итак, я реализовал Optional.isPresent
оператор. Но это не совсем то, что я ожидал.
Пожалуйста, посмотрите на эти списки:
Это часть моего сервиса:
if (getAllComputerProducers().isPresent()) {
if (isComputerProducerAlreadyExist(computerProducer))
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
computerProducerRepository.save(computerProducer);
return new ResponseEntity<>(HttpStatus.CREATED);
getAllComputerProducers
функция выглядит так:
private Optional<List<ComputerProducer>> getAllComputerProducers() {
return Optional.ofNullable(computerProducerRepository.findAll());
}
Как видите, эта функция возвращает Optional
из List
.
Функция isComputerProducerAlreadyExist
реализована так:
private boolean isComputerProducerAlreadyExist(ComputerProducer computerProducer) {
return getAllComputerProducers()
.get()
.stream()
.anyMatch(producer -> producer.getProducerName()
.equalsIgnoreCase(computerProducer.getProducerName()));
}
Это так много кода, и я считаю, что это можно сделать проще.
Моя цель - сократить код до одной строковой команды, например:
getAllCimputerProducers().ifPresent(***and-here-some-anyMatch-boolean-function***)
но я не могу вставить туда функцию, которая что-то возвращает. Как я могу это сделать?
Привет всем:)