我正在使用Kotlin进行项目,我写这段代码可以完成要求:
val rewards = ArrayList<Map<String, Int>>()
rangeExams
.forEach { examAnswer ->
var reward = hashMapOf("Score" to examAnswer.answerScore)
var questionIds = examAnswer
.answers
.map { it.id }
reward.put("NewQuestion", questionIds.size)
rewards.add(reward)
}
"rangeExams"是一个集合列表 .
我想结合Kotlin Collection of Collection,将rangeExams的元素放入一个 Map 中,并将这个 Map 放到一个新的列表中,
如何通过Kotlin简化此代码?
ExamAnswer是一个pojo:
class ExamAnswer (val id: String, val answerScore: Int, val answers:List<Answer>)
谢谢您的回复
2 回答
由于您为
rangeExams
的每个元素向rewards
添加了一个项目,因此.forEach { ... }
调用可以转换为.map .此外,您只使用
examAnswer.answers.map { it.id }
的结果来获取其大小,因此您可以删除.map { it.id }
并使用原始集合的大小 .如果之后不需要改变 Map ,可以将
hashMapOf(...)
替换为mapOf(...)
.如果你需要在创建后改变
rewards
列表,最后添加.toMutableList() .简化这一点有一点潜力 .
首先,我建议采用更具功能性的方法,将可变列表_2492753变为不可变列表 .
其次,将
put
的哈希映射reward
的创建推断为一行 . 你可以使用 Map 的不可变版本,而不是hashMapOf
创建的可变版本(如果你需要可变性,那么你可以保持hashMapOf
) .第三,你只需使用
questionIds
来表示大小 . 为此,您不必映射任何内容,只需调用examAnswer.ansers.size
即可 . 这个短暂的呼叫也可以推断出来第四,您可以使用
it
而不是显式命名参数examAnswer
,因为此块现在非常短这将导致此代码: