gpt4 book ai didi

java - 用 break 重写循环为 lambda

转载 作者:行者123 更新时间:2023-11-30 06:01:07 24 4
gpt4 key购买 nike

我有一个计数器循环:

List<Mt4Report> history = ...
int counter = 0;
for (Mt4Report item : history) {
if (item.getProfit().compareTo(BigDecimal.ZERO) < 0) {
counter++;
} else {
break;
}
}

我如何用 lambda 表达式写出相同的想法 .findFirst().ifPresent 但保留 break 语句?

最佳答案

对于 Java-9 及更高版本,您可以使用 takeWhile 方法:

int counter = (int) history.stream()
.takeWhile(item -> item.getProfit().compareTo(BigDecimal.ZERO) < 0)
.count();

对于 Java-8 解决方案,您可以查看 this answer 中提供的 takeWhile 的自定义实现。 .另一方面,使用 indexOf 的低效实现可能是执行:

int count = history.stream()
.filter(ite -> ite.getProfit().compareTo(BigDecimal.ZERO) >= 0)
.findFirst()
.map(history::indexOf)
.orElse(history.size());

正如 Holger 建议改进上述解决方案,您可以将 IntStreamfindFirst 一起使用:

int count = IntStream.range(0, history.size())
.filter(ix -> history.get(ix).getProfit() .compareTo(BigDecimal.ZERO) >= 0)
.findFirst()
.orElse(history.size());

关于java - 用 break 重写循环为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58754577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com