我正在尝试将 for 循环转换为流。下面的 For 循环可以工作,但是我预计会在我的编码实践中使用流,但对这个概念很陌生。我尝试过查看在线示例,但是我遇到的问题是如何使用 forEach 迭代列表并对每个示例应用函数。
private List<Breakdown> createBreakdownList(final Encounter encounter, final Amount allowedAmt, final Amount discountAmt) {
int size = encounter.getServices().size();
for (int i = 0; i < size; i++) {
Breakdown breakdown = Breakdown.builder()
.service(encounter.getServices().get(i))
.networkRate(createNetworkRate(allowedAmt, discountAmt))
.build();
listBreakdown.add(breakdown);
}
return listBreakdown;
List<Breakdown> listBreakdown = encounter.getServices().stream()
.forEach()
.map(this::createBreakdown())
.collect(Collectors.toList());
private Breakdown createBreakdown() {
Return Breakdown.builder()
.service(encounter.getServices().get(i))
.networkRate(createNetworkRate(networkAllowedAmt, networkDiscountAmt))
.build();
}
应该是这样的
List<Breakdown> listBreakdown = encounter.getServices().stream()
.map(this::createBreakdown)
.collect(Collectors.toList());
private Breakdown createBreakdown(Service service) {
return Breakdown.builder()
.service(service)
.networkRate(createNetworkRate(networkAllowedAmt, networkDiscountAmt))
.build();
}
这就是我最终得到的结果 - 在这种情况下不需要使用stream()。
private List<Breakdown> createBreakdownList(final Encounter encounter, final Amount allowedAmt, final Amount discountAmt) {
List<Breakdown> listBreakdown = new ArrayList<>();
encounter.getServices()
.forEach(service -> {
listBreakdown.add(createBreakdown(service, allowedAmt, discountAmt));
});
return listBreakdown;
}
private Breakdown createBreakdown(final Service service, final Amount allowedAmt, final Amount discountAmt) {
return Breakdown.builder()
.service(service)
.rate(createRate(allowedAmt, discountAmt))
.build();
}