java - 有没有办法从 Java 改进 Scala 中的 for 循环实现

标签 java scala loops enums

我用 Java 写了一个方法,我想用 Scala 重写。 (Sales.Metrics 是一个 Enum)

for (int i = 0; i < Sales.Metrics.values().length; i++) {
    Sales.Metrics value = Sales.Metrics.values()[i];
    if (!metricValue.isSet(value)) {
        metricValue.setMetric(value, true);
    }
}

所以我提出了以下实现方案,但我怀疑它可能不是最佳方案。也许我缺少一些很酷的 Scala 功能。在 Scala 中使用 for 循环是否正确?

for (i <- Sales.Metrics.values().length) {
  val value: Sales.Metrics = Sales.Metrics.values()(i)
  if (!metricValue.isSet(value)) metricValue.setMetric(value, true)
}

最佳答案

发电机i <- arr.length在你的代码中似乎没有任何意义。看起来应该是这样的

for (value <- Sales.Metrics.values() if !metricValue.isSet(value)) {
  metricValue.setMetric(value, true)
}

备注:

  1. 在 foreach 循环的主体中,您从不使用任何值的 index,您只使用 value .因此,您不必遍历索引,可以直接遍历值。
  2. Scala 允许 guardsfor里面-表达式/for -loops,所以你可以结合Java的forif合并到一个控制结构中。

另请注意,您的原始 Java 代码也可以在没有显式索引的情况下重写:

for (TypeOfValues v: Sales.Metrics.values()) {
    if (!metricValue.isSet(v)) {
        metricValue.setMetric(v, true);
    }
}

关于java - 有没有办法从 Java 改进 Scala 中的 for 循环实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52781068/

相关文章:

java - 如何在测试配置中使用相同的bean但具有不同的属性?

java - Spark 提交到 Amazon EMR 时如何指定自定义 log4j.configuration 的位置?

java - 遍历 View 组

windows - Windows 上的 sbt 0.13 - 无法访问存储库

php - 如何从玩家手中移除重复的扑克牌?

python - 根据列表索引将二进制列表转换为组合所需的值

java - 对话框打开时检测后退按钮事件

Scala flatMap 通过 getConstructors 方法(反射)

java - Scala 的另一个 "Unable to instantiate activity ComponentInfo"

node.js - Node JS 如何处理缓慢的 http 请求?