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

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. Sold Product 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 constructor).
Write a function, which will map the Stream Sold Product instance of Sold ProductsAggregate to an which is defined as follows:
@Value
class SoldProductsAggregate {
List SimpleSold Product> 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 return some invalid values (like null, empty or negative). You should handle it by ignoring them.?
If an argument you get as input to SoldProductsAggregate.aggregate()
is null, empty Stream
and so on-then you must not return null In case of such argument vou 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!