У меня есть таблица заказов много-много. Для каждого идентификатора заказа может быть много идентификаторов продукта. Когда я получаю данные из базы данных, я пытаюсь получить все продукты для каждого заказа соответственно в виде объекта. Идея состояла в том, чтобы проверить, совпадает ли идентификатор заказа последнего элемента в LinkedList (список, который я пытаюсь вернуть с помощью метода) с идентификатором заказа следующего элемента, который я пытаюсь записать в список. Если заказ такой же, я добавляю другой продукт в этот заказ, если нет, я делаю новый заказ с его продуктом.
public List<OrderVO> getOrders(int id) {
List<Orders> orders = orderRepository.findByUserId(id);
List<OrderProduct> orderProduct = new ArrayList<>();
for (Orders o : orders) orderProduct = orderProductRepository.findByOrderId(o.getId());
LinkedList<OrderVO> orderz = new LinkedList<>();
for (OrderProduct op : orderProduct) {
OrderVO order = new OrderVO(Long.valueOf(op.getOrders().getId()));
Optional<Product> pResponse = productRepository.findById(op.getProduct().getId());
Product p = pResponse.get();
ProductVO pVO = new ProductVO(p.getId(), p.getName(), op.getAmountOfOrderedProduct());
if (orderz.peekLast().getId() == order.getId()) {
OrderVO o = orderz.getLast();
o.getOrderProducts().add(pVO);
orderz.addLast(o);
} else {
order.getOrderProducts().add(pVO);
orderz.addLast(order);
}
}
return orderz;
}
Проблема в том, что orderz.peekLast().getId()
на первой итерации всегда выдает Исключение нулевого указателя. Поэтому я попытался проверить, правильно ли он равен нулю, с помощью необязательного параметра:
Optional<LinkedList<OrderVO>> orderz = Optional.ofNullable(new LinkedList<>());
.
.
.
if (orderz.ifPresent(orderVOS -> orderz.get().peekLast().getId()) == order.getId()) {
OrderVO o = orderz.get().getLast();
o.getOrderProducts().add(pVO);
orderz.get().addLast(o);
} else {
order.getOrderProducts().add(pVO);
orderz.get().addLast(order);
}
Хотя кажется, что значение orderz.ifPresent(orderVOS -> orderz.get().peekLast().getId())
defualt является недействительным, поэтому я не могу сравнить его с целым числом. По иронии судьбы для этого я стараюсь сохранить свой код как можно более чистым. Буду признателен за любые другие предложения по исправлению этого фрагмента кода.