Не удается получить значение HashMap из ключа в HashMap

#kotlin #hashmap

#kotlin #hashmap

Вопрос:

Я пытаюсь получить значение определенного ключа.

У меня есть Hasmap<Account, someValue> . У меня есть уникальный ключ для идентификации каждой учетной записи по идентификатору. Учетная запись — это класс данных, который я определил.

 data class Account (var name : String, val OwnerEmail : String, val sharedUsersEmailList : HashMap <String,Boolean>, val ExpenseKeyList : HashMap <String,Boolean>){
    constructor(): this("" , "", hashMapOf(),hashMapOf())
  

m_accountseExpense — это hashmap.

Я использую следующий код, чтобы получить учетную запись из HashMap:

 private fun GetAccountFromList(accountId : String): Account? {
    val accountList = m_accountseExpense.keys
    accountList.forEach{
        if (it.GetAccountId() == accountId){
            Log.w("hashcode", it.hashCode().toString())
            return it
        }
    }
    return null
}
  

Эта функция возвращает учетную запись из HashMap.

После того, как я получил учетную запись из функции, я пытаюсь получить значение, но получаю null .

Я даже пытаюсь запустить этот код, чтобы проверить его:

 val accountToShow = GetAccountFromList(m_accountToShowKey)
// in here I'm getting the Account from the hashmap
Log.w("hashcode", accountToShow.hashCode().toString())
val temp = m_accountseExpense.containsKey(accountToShow)
Log.w("hashcode", temp.toString())
  

после получения учетной записи я проверяю, есть ли она в Hashmap, и получаю false.
хотя я получаю учетную запись, и все значения одинаковы, и
Хэш-код тот же, и я не могу получить значение этой учетной записи.
когда я пытаюсь получить значение m_accountseExpense[accountToShow], я получаю null .
Есть предложения?
Большое вам спасибо

Редактировать :

 fun GetAccountId() : String{
    return this.name  "_"   CreateUserId(this.OwnerEmail)
}

fun CreateUserId(email: String) : String
{
    val firstDotIndex = email.indexOf(".")
    return email.substring(0,firstDotIndex)
}
  

Комментарии:

1. Как это Account.GetAccountId() выглядит?

2. Я обновляю код, GetAccountId — это просто строка

3. Вы уверены m_accountseExpense , что карта не изменена в другом потоке? Будет ли это работать с m_accountseExpense.entries.find { (key, value) -> key.GetAccountId() == accountId }?.value ?

4. Я не думал использовать lambda, спасибо @МихаилНафталь, но я все равно хотел бы понять, что пошло не так. я почти уверен, что поток не изменил его, я смотрю на все значения, и все hascode одинаковы во всех из них. Я использую эту логику в обратном вызове, и я делаю это в MutableLiveData, но я не думаю, что другой поток изменяет значения.