Question: While working on an e - commerce service,you need to build a simple aggregator for a report,which will hold sold products and a sum of

While working on an e-commerce service,you need to build a simple aggregator for a report,which will hold sold products and a sum of their prices converted to EUR currency. You're given a stream(java.util.stream.Stream) of SoldProduct objects.SoldProduct is defined as follows: @Value class SoldProduct { String name; Bigdecimal price; String currency; }(@Value comes from lombok tool and will make this class immutable-generate toString,equals and hashcode, make all fields private and final,add getters for all the fields and add single all arguments contructor). Write a function,Which will map the Stream to an instance of SoldProductsAggregate which is defined as follows: @Value class SoldProductsAggregate { List products; BigDecimal total; } and SimpleSoldProduct @Value class SimpleSoldProduct { String name; BigDecimal price; } To convert price to EUR use EURExchangeService which implements ExchangeService: interface ExchangeService { Optional rate(String currency); } Unfortunately EURExchangeService is a bit buggy and may be return some invalid values(like null,empty or negative). You should handle it by ignoring them. If an argumemt you get as input to SoldProductsAggregates.aggregate() is null,empty Stream and so on-thenyou must not return null.In case of such argument, you must convert it to empty Stream before doing the mapping.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!