Я столкнулся с интересным вопросом из одного интервью: создание агрегатора, в котором хранятся элементы и сумма их цен, конвертированная в валюту GBR.
Поток (java .util.stream.Stream) продукта Объекты задаются следующим образом:
@Value
class Product{
String name;
BigDecimal price;
String currency;
}
@ значение взято из инструмента Lombok и может генерировать toString, equals и hashCode. Он имеет геттеры для всех полей и конструктор с единичными аргументами).
Функция-агрегатор сопоставляет Stream с экземпляром ItemsAggregate, определенным следующим образом:
@value
class ItemsAggregate{
List<Item> products;
BigDecimal total;
}
@Value
class Item{
String name;
BigDecimal price;
}
Для преобразования предоставляется интерфейс Exchange 'price' для GBR использовать GBRExchange:
interface Exchange{
Optional<BigDecimal> rate(String currency);
}
Ответ, который я могу сделать сейчас:
public class itemsAggregator implements Exchange{
private Exchange exchange;
itemsAggregator(GBRExchange GBRExchange){
this.exchange = GBRExchange;
}
ItemsAggregate aggregate(Stream<Product> products){
ItemsAggregate result = new ItemsAggregate();
result.products = products.stream().filter(0->o!=null).collect(products.getName() ->Collectors.toList());
result.total = products.stream().filter(o->o.getPrice()>=0).mapToInt(o -> o.getPrice()).sum();
result.total = exchange.rate(result.total);
return result;
}
@value
class ItemAggregate{
List<item> products;
BigDecimal total;
}
@value
class Item{
String name;
BigDecimal price;
}
}
Объект: 1. fini sh агрегатная функция и получить Переменная GBR 'total'. 2. Обработка недопустимых значений, таких как ноль, пустые и отрицательные значения для GBRExchange, поскольку это может привести к ошибкам. 3. null, пустой Stream и т. Д., Входные данные для ItemsAggregate.aggregate () должны возвращать пустой Stream вместо null перед выполнением сопоставления.
Может кто-нибудь дать мне несколько советов, чтобы исправить это решение (поскольку я не могу отладить его), особенно в отношении пунктов 2 и 3? И я не уверен, правильно ли я отношусь к классам @Value.
Большое спасибо.