Android 我能';不存在于地图';s迭代

Android 我能';不存在于地图';s迭代,android,kotlin,Android,Kotlin,我迭代映射并希望在执行此行时退出: mostOccurRecognizedCheck = filterList.get(0) 下面是一段: val maxIndexesMap: Map<Int, Int> = howOftenCheckIndexMap.filter { it.value == findMaxCount } maxIndexesMap.forEach lit@{ (indexMaxCount, value) ->

我迭代映射并希望在执行此行时退出:

mostOccurRecognizedCheck = filterList.get(0)
下面是一段:

val maxIndexesMap: Map<Int, Int> =
            howOftenCheckIndexMap.filter { it.value == findMaxCount }
    maxIndexesMap.forEach lit@{ (indexMaxCount, value) ->
                val filterList: List<Check> =
                    recognizedCheckList.filterIndexed { index, check -> index == indexMaxCount && check.amount != null }
                if (filterList.isNotEmpty()) {
                    Debug.d(
                        TAG,
                        "getMostOccurRecognizedCheck: get_first_item from RESULT_FILTER_LIST(${filterList.size}) = $filterList"
                    )
                    mostOccurRecognizedCheck = filterList.get(0)
                    return@lit 
                } else {
                    Debug.w(
                        TAG,
                        "getMostOccurRecognizedCheck: filterList_is_empty -> get_item_from_index = $indexMaxCount in recognizedCheckList"
                    )
                    mostOccurRecognizedCheck = recognizedCheckList.get(indexMaxCount)
                }
            }
正如你所看到的

get_first_item
打印4次。 为什么?

我用这个退出

return@lit

但是它没有帮助

forEach
将为地图的每个元素运行,这是无法停止的。您的
return
语句将仅从lambda的单个执行返回

如果要查找某个元素(并返回该元素),则
。find
更适合:

  maxIndexesMap.find { (indexMaxCount, value) ->
                val filterList: List<Check> =
                    recognizedCheckList.filterIndexed { index, check -> index == indexMaxCount && check.amount != null }
                !filterList.empty() 
  }?.let { (indexMaxCount, value) ->
    // Log
  }
maxIndexMap.find{(indexMaxCount,value)->
val过滤器列表:列表=
recognizedCheckList.filterIndexed{index,check->index==indexMaxCount&&check.amount!=null}
!filterList.empty()
}?.让{(indexMaxCount,value)->
//日志
}
(您需要
?。如果没有filterList不为空的元素,则使用


请注意,这不会为“其他”情况记录任何内容。

forEach
将为映射的每个元素运行,无法停止。您的
return
语句将仅从lambda的单个执行返回

如果要查找某个元素(并返回该元素),则
。find
更适合:

  maxIndexesMap.find { (indexMaxCount, value) ->
                val filterList: List<Check> =
                    recognizedCheckList.filterIndexed { index, check -> index == indexMaxCount && check.amount != null }
                !filterList.empty() 
  }?.let { (indexMaxCount, value) ->
    // Log
  }
maxIndexMap.find{(indexMaxCount,value)->
val过滤器列表:列表=
recognizedCheckList.filterIndexed{index,check->index==indexMaxCount&&check.amount!=null}
!filterList.empty()
}?.让{(indexMaxCount,value)->
//日志
}
(您需要
?。如果没有filterList不为空的元素,则使用


请注意,这不会为“其他”情况记录任何内容。

因为foreach中的返回@*在java中的工作方式类似于
continue
。看见解决方案是因为foreach中的return@*与java中的continue类似。看见解决