java - 如何使用前一个对象计算值转换地图对象
问题描述
我有这样的课
class Transaction{
long id;
String type;
long quantity;
double amount;
}
我想把它转换成如下
class TransactionDTO{
long id;
String type;
long quantity;
double amount;
double total;
}
假设输入如下
Transaction( id=1, type=buy, quantity=5, amount=5)
Transaction( id=1, type=buy, quantity=2, amount=3)
Transaction( id=1, type=buy, quantity=3, amount=6)
应该输出如下(quantity*amount adds when buy subtract when sell with previous amount)
Transaction( id=1, type=buy, quantity=5, amount=5, total=25)
Transaction( id=1, type=sell, quantity=2, amount=3, total=19)
Transaction( id=1, type=buy, quantity=3, amount=6, total=37)
我可以使用 for 循环轻松完成此操作。但我想知道这是否可以用lambda
.
特别希望将先前计算的总数与基于 的下一个元素一起使用Transaction type
。
那么这可以做到吗?如果是,那怎么办?
解决方案
你可以这样做:
public List<TransactionDTO> getTransaction() {
double[] temporaryTotal = new double[1];
List<Transaction> transactionList = Arrays.asList(
new Transaction(1, "buy", 5, 5),
new Transaction(1, "sell", 2, 3),
new Transaction(1, "buy", 3, 6)
);
return transactionList.stream()
.map(
transaction -> new TransactionDTO(
transaction.getId(),
transaction.getType(),
transaction.quantity,
transaction.getAmount(),
calculate(transaction, temporaryTotal[0])
)
)
.peek(transaction -> temporaryTotal[0] = transaction.getTotal())
.collect(Collectors.toList());
}
private double calculate(final Transaction transaction, final double total){
if (transaction.getType().equals("buy")){
return total + (transaction.getQuantity() * transaction.getAmount());
}
return total - (transaction.getQuantity() * transaction.getAmount());
}
由于变量total
不是最终的或有效的最终我们可以使用带有一个名为的元素的数组temporaryTotal
。
输出是:
[TransactionDTO(id=1, type=buy, quantity=5, amount=5.0, total=25.0),
TransactionDTO(id=1, type=sell, quantity=2, amount=3.0, total=19.0),
TransactionDTO(id=1, type=buy, quantity=3, amount=6.0, total=37.0)]
推荐阅读
- angular6 - Angular 6 材质 ui 表格宽度
- wordpress - WordPress - 媒体库在控制台中显示 503 错误
- node.js - gcloud 使用 node.js 包计算全局地址
- ios - 物理身体离开圈子球员
- enums - 使用闭包返回对枚举变体内容的引用时“无法推断出适当的生命周期”
- java - 2 x @NotNull == 太多了?
- excel - Excel 如何首先扫描匹配项,然后拆分部分行并在行尾创建一列?
- python - 如何在 pytorch 模型中加载检查点文件?
- kubernetes - Kubernetes - 如何在集群级别设置 DNS 策略
- ios - CSS 仅在 iOS 中滚动捕捉