gpt4 book ai didi

java - 将循环转换为 lambda 表达式

转载 作者:行者123 更新时间:2023-12-02 01:15:06 26 4
gpt4 key购买 nike

List<Mt4Strategy> openStrategies = ...

OrderType sample = openStrategies.get(0).calculate().getOrderType();
boolean success = true;
for (int i = 1; i < openStrategies.size(); i++) {
Mt4Action calculate = openStrategies.get(i).calculate();
if (calculate.getOrderType() != sample) {
success = false;
break;
}
}

OrderType 是一个枚举。

我不知道第一个元素包含什么,因此被迫创建openStrategies.get(0)...。我想摆脱这个 get(0),但是怎么办呢?

我尝试像这样使用 lambda:

OrderType sample = openStrategies.get(0).calculate().getOrderType();
boolean success = IntStream.range(1, openStrategies.size()).mapToObj(i ->
openStrategies.get(i).calculate()).noneMatch(calculate ->
calculate.getOrderType() != sample);

这是一个好的开始,但没有解决我的 get(0) 问题。

使用 lambda 可以摆脱它吗?我如何编写此代码来检查成功而无需get(0)? Lambda 解决方案的优先级类似于最后一个案例 .noneMatch

最佳答案

您显然想要确定所有输入列表元素是否具有相同的订单类型。流应该使这变得非常简单。例如,

boolean success = openStrategies.stream()
.map(s -> s.calculate().getOrderType())
.distinct()
.limit(2)
.count() == 1;

请注意,此处的差异性比较是通过 equals 完成的。而不是== 。如果您确实需要== ,比较困难。

这会检查列表中是否只有一个值。如果输入可以为空并且您希望结果在这种情况下为 true,请更改 == 1<= 1 .

limit(2)不需要正确性,但允许搜索在找到第二个不同值后立即停止,因此效率更高。

还有其他方法可以做到这一点。

回复评论

有多种不同的方法可以让你在不调用 .get(0) 的情况下获得通用值。 ,但没有一个更清晰(至少我能想到)。为了避免您不喜欢其外观的调用而以奇怪的方式编写代码是愚蠢的。

关于java - 将循环转换为 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775758/

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