Java 从“返回”;至于;在Scala中,与“从”返回不同;至于;在爪哇

Java 从“返回”;至于;在Scala中,与“从”返回不同;至于;在爪哇,java,scala,Java,Scala,我有一个Java代码,我想将其转换为Scala one: MyClass myMethod(String str1) { for (Item item: items) { if (/* some condition */) { if(/* another condition */) { return item.myMethod123(); } } } retu

我有一个Java代码,我想将其转换为Scala one:

    MyClass myMethod(String str1) {
      for (Item item: items) {
        if (/* some condition */) {
          if(/* another condition */) {
            return item.myMethod123();
          }
        }
     }

     return super.myMethod(str1);   
   }
如果我在Scala中使用
for
,它将被转换为
map
,也就是说在
map
中调用
return
只会从
map
返回值,但不会停止
myMethod
执行。但我希望它的行为与此Java代码中的行为完全相同

我如何解决这个问题

UPDATE:我的意思是,我必须使用
foreach
而不是
for
。但是,从
foreach
调用
return
只是从
foreach
返回值,而不是停止执行
myMethod

UPDATE2:我很困惑,
foreach
没有返回任何值。

它实际上会停止执行
myMethod
,因为在幕后它实际上抛出了一个(无堆栈跟踪)异常,在实际返回之前被
myMethod
捕获。所以你就

def myMethod(str1: String) {
  for (item <- items) {
    if (/*some cond*/) {
      if (/*other cond*/) {
        return item.myMethod123
      }
    }
  }
  super.myMethod(str1)
}
它将首先选择可以调用方法的项,如果没有这样的项,它将默认为super。

它实际上将停止执行
myMethod
,因为在幕后它实际上抛出了一个(无堆栈跟踪)异常,该异常在实际返回之前被
myMethod
捕获。所以你就

def myMethod(str1: String) {
  for (item <- items) {
    if (/*some cond*/) {
      if (/*other cond*/) {
        return item.myMethod123
      }
    }
  }
  super.myMethod(str1)
}

它将首先选择您可以调用方法的项,或者如果没有这样的项,则默认为super。

您可以显示试用scala代码吗?foreach不像java表达式,它是集合上的函数,它只会调用映射中每个项的函数,就像java一样,您还需要使用for表达式,比如@rex kerr explained
items.find(item=>/*某些条件*/&&/*另一个条件*/).fold(super.myMethod(str1))(u.myMethod123())
你能展示你的试用scala代码吗?foreach不像java表达式,它是集合上的一个函数,它只会在地图中的每个项目上调用一个函数,要想像java一样,您还需要使用for表达式,比如@rex kerr explained
items.find(item=>/*某些条件*/&&/*另一个条件*/).fold(super.myMethod(str1))(u.myMethod123())