在 Kotlin 中,如何重构 "if else" 并使用 "when" 代替它与 equals 忽略大小写比较?
In Kotlin, how to refactor "if else" and use "when" instead of it with equals ignore case comparison?
我想重构此代码以使用“when”而不是“if else”。对于我的情况,如何使用 Kotlin 的 when(char) 忽略大小写?
if(char.equals("A", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade1))
else if(char.equals("B", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade2))
else if(char.equals("C", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade3))
else if(char.equals("D", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade4))
else if(char.equals("E", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade5))
else if(char.equals("F", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade6))
...
else if(char.equals("Z", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade26))
else
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade27))
如果有好的方法,请告诉我。
这就是您所需要的。
val char = "G"
when {
char.equals("A", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade1))
}
char.equals("B", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade2))
}
char.equals("C", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade3))
}
char.equals("D", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade4))
}
char.equals("E", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade5))
}
char.equals("F", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade6))
}
char.equals("Z", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade26))
}
else -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade27))
}
}
但最好的方法是你应该这样做。
data class Alpha(val alpha:String , val color: Int)
fun generateData() {
val listAlpha = arrayListOf<Alpha>()
listAlpha.add(Alpha("A", R.color.colorBgShade1))
listAlpha.add(Alpha("B", R.color.colorBgShade2))
listAlpha.add(Alpha("C", R.color.colorBgShade3))
listAlpha.add(Alpha("D", R.color.colorBgShade4))
var char = "D"
val alphaFindResult = listAlpha.single { it.alpha.equals(char, true) }
background.setTint(ContextCompat.getColor(context, alphaFindResult.color))
}
实现您需要的更简单的方法是:
val colorMap = mapOf (
'A' to R.color.colorBgShade1,
'B' to R.color.colorBgShade2,
...
...
)
val char = 'G'
val bgColor = colorMap[char] ?: R.color.colorBgShade27
background.setTint(ContextCompat.getColor(context, bgColor)
也许这就是您想要的:
val ch = 'A'
val src = when (ch.toUpperCase()) {
'A' -> R.color.colorBgShade1
'B' -> R.color.colorBgShade2
// ...
'Z' -> R.color.colorBgShade26
else -> R.color.colorBgShade27
}
background.setTint(ContextCompat.getColor(context, src))
但是使用 Map
始终是解决此类问题的更好方法。
我想重构此代码以使用“when”而不是“if else”。对于我的情况,如何使用 Kotlin 的 when(char) 忽略大小写?
if(char.equals("A", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade1))
else if(char.equals("B", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade2))
else if(char.equals("C", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade3))
else if(char.equals("D", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade4))
else if(char.equals("E", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade5))
else if(char.equals("F", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade6))
...
else if(char.equals("Z", true))
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade26))
else
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade27))
如果有好的方法,请告诉我。
这就是您所需要的。
val char = "G"
when {
char.equals("A", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade1))
}
char.equals("B", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade2))
}
char.equals("C", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade3))
}
char.equals("D", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade4))
}
char.equals("E", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade5))
}
char.equals("F", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade6))
}
char.equals("Z", true) -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade26))
}
else -> {
background.setTint(ContextCompat.getColor(context, R.color.colorBgShade27))
}
}
但最好的方法是你应该这样做。
data class Alpha(val alpha:String , val color: Int)
fun generateData() {
val listAlpha = arrayListOf<Alpha>()
listAlpha.add(Alpha("A", R.color.colorBgShade1))
listAlpha.add(Alpha("B", R.color.colorBgShade2))
listAlpha.add(Alpha("C", R.color.colorBgShade3))
listAlpha.add(Alpha("D", R.color.colorBgShade4))
var char = "D"
val alphaFindResult = listAlpha.single { it.alpha.equals(char, true) }
background.setTint(ContextCompat.getColor(context, alphaFindResult.color))
}
实现您需要的更简单的方法是:
val colorMap = mapOf (
'A' to R.color.colorBgShade1,
'B' to R.color.colorBgShade2,
...
...
)
val char = 'G'
val bgColor = colorMap[char] ?: R.color.colorBgShade27
background.setTint(ContextCompat.getColor(context, bgColor)
也许这就是您想要的:
val ch = 'A'
val src = when (ch.toUpperCase()) {
'A' -> R.color.colorBgShade1
'B' -> R.color.colorBgShade2
// ...
'Z' -> R.color.colorBgShade26
else -> R.color.colorBgShade27
}
background.setTint(ContextCompat.getColor(context, src))
但是使用 Map
始终是解决此类问题的更好方法。