gpt4 book ai didi

lambda - 使用Lambda重构Kotlin方法

转载 作者:行者123 更新时间:2023-12-02 13:08:48 25 4
gpt4 key购买 nike

我有以下emun类代表我的导航栏 View 。

enum class NavigationPosition(val position: Int, val id: Int) {
HOME(0, R.id.nav_home),
SEARCH(1, R.id.nav_search),
PROFILE(2, R.id.nav_profile),
SETTINGS(3, R.id.nav_settings);
}

我目前正在使用以下方法按位置进行反向查找
fun getByPosition(position: Int): NavigationPosition = when (position) {
0 -> NavigationPosition.HOME
1 -> NavigationPosition.SEARCH
2 -> NavigationPosition.PROFILE
3 -> NavigationPosition.SETTINGS
else -> NavigationPosition.HOME
}

var navigationPosition = getByPosition(position)

我可以使用Kotlin Lambda或扩展函数来重构 getByPosition吗?

最佳答案

如前所述,您可以使用NavigationPosition.values()但是,提出的当前方法不是高效的内存。 values function creates a new array every time it is called。我强烈建议您将其缓存在静态变量中,以确保每次调用时都不会初始化它,因为这样做效率不高。

将比较方法与缓存方法结合起来,可以在枚举内部使用一个伴随对象。现在,就像我说的那样,在这里缓存值是最好的选择,因此,除了一个方法(在其他两个答案中都提到过)之外,您还创建了一个包含值的字段,以避免每次调用时都重新调用它方法。

companion object {
private val values = values()
fun getPositionById(id: Int) = if(id < values.size && id >= 0) values[i] else HOME
}

关于lambda - 使用Lambda重构Kotlin方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com