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类似。看见解决