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

有没有办法从Java改进Scala中的for循环实现,java,scala,loops,enums,Java,Scala,Loops,Enums,我已经用Java编写了一个方法,我想将其重写为Scala。(Sales.Metrics是一个枚举) for(int i=0;i 类的实现,您可能需要 Ascala < /Case>转换器(参见导入集合.javaCouvter。< />代码>) 。您已经要求Scala语言特性,可以考虑使用Scala高级特性,例如“理解”。用于根据您的需求对列表进行迭代。通常,我们使用Scala for Comprehension with Yield来生成具有预期结果的新列表。 条件保护的应用也与中的相同 for

我已经用Java编写了一个方法,我想将其重写为Scala。(Sales.Metrics是一个
枚举

for(int i=0;i
因此,我提出了以下实现,但我怀疑它可能不是最优的。也许我错过了一些很酷的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)
}
for(igenerator
igenerator
i
我会在这里使用foreach,因为你需要的只是一个副作用

根据
Metrics
类的实现情况,您可能需要
asScala
-converter(请参见
import collection.JavaConverters.\u

我会在这里使用foreach,因为你需要的只是一个副作用


根据<代码>度量> <代码>类的实现,您可能需要<代码> Ascala < /Case>转换器(参见<代码>导入集合.javaCouvter。< />代码>)

。您已经要求Scala语言特性,可以考虑使用Scala高级特性,例如“理解”。用于根据您的需求对列表进行迭代。通常,我们使用Scala for Comprehension with Yield来生成具有预期结果的新列表。 条件保护的应用也与中的相同

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

Value

由于您已经要求Scala语言特性,您可以考虑使用Scala高级特性,如“理解”来根据您的需求迭代列表。通常,我们使用Scala来理解收益率,以产生预期结果的新列表。 条件保护的应用也与中的相同

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

值来自
Sales.Metrics.values()[i]
,您可以推断它必须是一个数组-Java中没有其他数据结构接受方括号索引。实际上,Java中没有其他数据结构接受方括号…来自
Sales.Metrics.values()[i]
,您可以推断它一定是一个数组-Java中没有其他数据结构接受方括号索引。实际上,Java中没有其他数据结构接受方括号…我认为您可能可以避免使用分号“;”来处理Scala样式,因为它主要用于Java上下文。:)@madhawaOnline无法真正测试代码,因为OP没有给出
销售的定义。Metrics
应该是什么,不太确定分号是否可以省略,没有换行符和大括号…但是,是的,你可能是对的,分号在这里是多余的,谢谢。我想你可能可以避免使用Semi结肠“为了处理这里的Scala风格,因为它主要用于Java上下文。:@madhawaOnline无法真正测试代码,因为OP没有给出
销售的定义。Metrics
应该是什么,不太确定分号在这里是否可以省略,而不需要换行符和大括号…但是,是的,你可能是对的,分号olon在这里是多余的,谢谢。
for (TypeOfValues v: Sales.Metrics.values()) {
    if (!metricValue.isSet(v)) {
        metricValue.setMetric(v, true);
    }
}
Sales.Metrics.values() foreach { value =>
   if (!metricValue.isSet(value)) metricValue.setMetric(value, true)
}
for {
  value <- Sales.Metrics.values()
  if !metricValue.isSet(value)
} yield metricValue.setMetric(value, true)