Это должно работать, если у вас есть соответствующий getters
для класса. Он просто создает поток OrderDetails
объектов, отфильтровывает нулевые коды продуктов и создает карту сумм доходов.
Map<String,Integer> results = orderDetails.stream()
.filter(od->od.getProductCode() != null)
.collect(Collectors.groupingBy(OrderDetails::getProductCode,
Collectors.summingInt(OrderDetails::getRevenue)));
При желании вы можете затем вернуть значения обратно в список, создав новый экземпляр каждого класса OrderDetails
.
orderDetails = results.entrySet().stream()
.map(e->new OrderDetails(e.getKey(), e.getValue()))
.collect(Collectors.toList());
Использование карты может быть более полезным, поскольку вы можете получить доход от любого кода продукта.
Например,
System.out.println(results.get("A012"));