如何将这个For循环转换成Stream?

问题描述 投票:0回答:2

我正在尝试将 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();
}

java for-loop java-stream
2个回答
1
投票

应该是这样的

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();
}

0
投票

这就是我最终得到的结果 - 在这种情况下不需要使用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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.