Java流-将一个对象分解为2个对象并映射它们(映射、过滤和收集)
我有一门课是这样的:Java流-将一个对象分解为2个对象并映射它们(映射、过滤和收集),java,java-8,stream,Java,Java 8,Stream,我有一门课是这样的: Class SoldProduct { String name; BigDecimal Price; String currency; } 还有像这样的方法签名 SoldProductReport generateReport(Stream<SoldProduct> products) { } 我以前在这样复杂的流上工作过。如何最好地填充该方法?假设现有类具有必要的getter/setter/constructor,方法gen
Class SoldProduct {
String name;
BigDecimal Price;
String currency;
}
还有像这样的方法签名
SoldProductReport generateReport(Stream<SoldProduct> products) {
}
我以前在这样复杂的流上工作过。如何最好地填充该方法?假设现有类具有必要的getter/setter/constructor,方法
generateReport
应该将SoldProduct
的输入流重新映射到Product
列表,然后返回结果报告以及计算总价
示例实现(未测试),假设有某个实例ExchangeService服务
提供汇率:
SoldProductReport generateReport(流式产品){
列表报告产品=产品
.map(p->新产品(
“USD”。等于(p.getCurrency())
?p.getPrice()
:p.getPrice().乘法(
service.getRate(p.getCurrency()).orElse(BigDecimal.ZERO)
)
))//流
.filter(p->p.getPrice().compareTo(BigDecimal.ZERO)>0)//删除价格为非正的产品
.collect(Collectors.toList());
返回新的SoldProductReport(
reportProducts,//列表
reportProducts.stream()
.map(产品::getPrice)
.reduce(BigDecimal.ZERO,BigDecimal::add)//总计
);
}
分享您迄今为止的尝试会很有帮助。您在中使用“-ve”是什么意思?如果它为空或-ve,我需要忽略该产品。
?-ve
是您的SoldProduct
对象的currency
字段中可能包含的字符串吗?如果汇率为null或负值,我应该完全忽略SoldProduct
Class SoldProductReport {
List<Product> products;
BigDecimal total;
}
Class Product{
String name;
BigDecimal price;
}
interface ExchangeService {
Optional<BigDecimal> getRate(String Currency);
}