gpt4 book ai didi

java - 你如何遍历scala中的每个状态?

转载 作者:行者123 更新时间:2023-11-28 21:03:39 24 4
gpt4 key购买 nike

我正在尝试遍历每个状态以检查 ArrayList 是否至少有 1 个 ACTIVE 和 1 个 INACTIVE 状态。

var active = false;
var inactive = false;
for (item <- reasons.items) {
if(item.status == "ACTIVE")
active = true
if(item.status == "INACTIVE")
}
active must be (true)
inactive must be (true)

有没有更简洁的方法来做到这一点?我试过这样的流,但没有成功

var active = false;      
var stream = reasons.items.toStream
.forEach(item => if(item.status == "ACTIVE") {active = true})

注:reasons holds items(有1个项目)。 items 包含可以像 reasons.items.get(x) 这样调用的单个项目。

最佳答案

其他答案很好地解释了如何使用 Scala 集合来实现这一点。因为看起来您正在使用 ScalaTest,所以我想补充一点,您也可以使用 ScalaTest 来遍历元素。

使用检查员的循环式语法:

forAtLeast(1, reasons.items) { item =>
item.status must be ("ACTIVE")
}

forAtLeast(1, reasons.items) { item =>
item.status must be ("INACTIVE")
}

请注意,检查器与匹配器是分开定义的,因此您必须import org.scalatest.Inspectors._extends … with org.scalatest.Inspectors 到将 forAtLeast 纳入范围。

如果你想避免来自检查器的循环式语法,你可以使用检查器速记语法和基于反射的 have 语法:

atLeast(1, reasons.items) must have ('status "ACTIVE")
atLeast(1, reasons.items) must have ('status "INACTIVE")

如果您想避免 have 的基于反射的语法,您可以扩展 have 语法以直接支持您的 status 属性:

def status(expectedValue: String) =
new HavePropertyMatcher[Item, String] {
def apply(item: Item) =
HavePropertyMatchResult(
item.status == expectedValue,
"status",
expectedValue,
item.title
)
}

atLeast(1, reasons.items) must have (status "ACTIVE")
atLeast(1, reasons.items) must have (status "INACTIVE")

或者如果你更喜欢 be 而不是 have,你可以扩展 be 语法来添加对 active 的支持和不活跃:

class StatusMatcher(expectedValue: String) extends BeMatcher[Item] {
def apply(left: Item) =
MatchResult(
left.status == expectedValue,
left.toString + " did not have status " + expectedValue,
left.toString + " had status " + expectedValue,
)
}

val active = new StatusMatcher("ACTIVE")
val inactive = new statusMatcher("INACTIVE")

atLeast(1, reasons.items) must be (active)
atLeast(1, reasons.items) must be (inactive)

在这里的示例中,定义自己的匹配器只是为了在断言中保存几个单词看起来有点傻,但是如果您编写了数百个关于相同属性的测试,那么将您的断言记下来会非常方便到一行,仍然自然可读。所以根据我的经验,如果你在很多测试中重用它们,像这样定义你自己的匹配器是有意义的。

关于java - 你如何遍历scala中的每个状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658978/

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