Я не могу существовать из итерации карты - PullRequest
0 голосов
/ 15 января 2020

Я повторяю карту и хочу выйти при выполнении этой строки:

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)
                }
            }

и здесь журнал:

getMostOccurRecognizedCheck: findMaxCount = 1 -> maxIndexesMap = {1=1, 0=1, 3=1, 2=1}
getMostOccurRecognizedCheck: get_first_item from RESULT_FILTER_LIST(1) = [
Check(fuel = GPL, fuelPrice = 9.87, volume = 10.13, amount = 100.0, tva = 7.41, date = Mon Jan 06 15:07:17 GMT+02:00 2020, name=null, address=null, idno=null, codFiscal=null, id=0, transactionID=null
getMostOccurRecognizedCheck: get_first_item from RESULT_FILTER_LIST(1) = [
Check(fuel = null, fuelPrice = null, volume = null, amount = 100.0, tva = null, date = null, name=null, address=null, idno=null, codFiscal=null, id=0, transactionID=null, ]
getMostOccurRecognizedCheck: get_first_item from RESULT_FILTER_LIST(1) = [
Check(fuel = GPL, fuelPrice = 9.87, volume = 10.13, amount = 100.0, tva = null, date = Wed Jan 08 15:07:17 GMT+02:00 2020, name=null, address=null, idno=null, codFiscal=null, id=0, transactionID=null, ]
getMostOccurRecognizedCheck: get_first_item from RESULT_FILTER_LIST(1) = [
Check(fuel = GPL, fuelPrice = 9.87, volume = 10.13, amount = 100.0, tva = null, date = Mon Jan 06 15:07:17 GMT+02:00 2020, name=null, address=null, idno=null, codFiscal=null, id=0, transactionID=null, ]

As Вы можете увидеть

get_first_item

печать 4 раза. Почему?

Я использую это для выхода

return@lit

, но это не помогает

1 Ответ

2 голосов
/ 15 января 2020

forEach будет работать для каждого элемента карты, это не остановить. Ваш оператор return просто вернется из этого одиночного выполнения лямбды.

Если вы хотите найти какой-либо элемент (и вернуть его), тогда .find лучше подходит:

  maxIndexesMap.find { (indexMaxCount, value) ->
                val filterList: List<Check> =
                    recognizedCheckList.filterIndexed { index, check -> index == indexMaxCount && check.amount != null }
                !filterList.empty() 
  }?.let { (indexMaxCount, value) ->
    // Log
  }

(вам нужен ?.let в случае, если нет элементов, для которых filterList не пуст).

Обратите внимание, что это ничего не регистрирует для «других» случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...