如何将循环转换为流,此java代码片段[重复]

7jmck4yq  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(107)
    • 此问题在此处已有答案**:

Break or return from Java 8 stream forEach?(14个答案)
昨天关闭。

for(Fees fee : feeList) {
    if(fee.getType().equalsIgnoreCase(feeType)) {
        baseFee = fee.getAmountFee();
        break;
    }
 }

我想知道是否有可能将上面的例子转换成一个有for循环的流。

wqsoz72f

wqsoz72f1#

当然,您可以按如下方式进行转换:

Optional<Double> optionFeeAmount = feeList
                .stream()
                .filter(fee -> feeType.equalsIgnoreCase(fee.getType()))
                .findFirst()
                .map(Fees::getAmountFee);

如果你想返回0作为默认结果,你可以在末尾添加orElse(0),如果列表中的顺序不重要,你也可以使用findAny()

nvbavucw

nvbavucw2#

是的,可能,类似于:

baseFee = feeList.stream().filter(fee -> fee.getType().equalsIgnoreCase(feeType))
            .map(Fees::getAmountFee)
            .findFirst()
            .orElse(baseFee);

解决方案说明:

  • filter函数替换if条件
  • map函数将每个Fees替换为其amountFee
  • findFirst函数将执行与break;相同的工作,并将在第一次匹配时返回。
  • orElse如果没有匹配项,则保留相同的baseFee

流API(函数式编程)在性能上足够智能,这意味着它不会过滤所有内容,然后进行Map,而是以自己的方式进行,性能良好。

相关问题