Retrieve enum by its given value, not the KEY

Viewed 55

I don't know the terminology so I don't know where to look (sorry). Here my enum:

enum class QualityGrade(val grade: Int) {
    GOOD(1), OK(2), SOSO(3), BAD(4)
}

What I want to do (somehow)

assertEquals(QualityGrade.GOOD, QualityGrade(1))

I don't have the words to describe this problem, so I hope someone can answer that...

1 Answers

Here is approach I typically use in such cases:

enum class QualityGrade(val grade: Int) {
    GOOD(1), OK(2), SOSO(3), BAD(4);

    companion object {
        private val valuesByGrade = values().map {
            it.grade to it
        }.toMap()

        fun findByGrade(grade: Int): QualityGrade? {
            return valuesByGrade[grade]
        }
    }
}

assert(QualityGrade.GOOD == QualityGrade.findByGrade(1))

UPD: reworked to slightly better version

Related