和光玉子 2024-05-23 23:25 采纳率: 66.7%
浏览 1
已结题

请问怎么调用这个高阶函数?

请问怎么调用这个高阶函数?


class Score(val classId: String, val subjectId: String, val score: Double)
fun processScore(scores: List<Score>, rule: (Score) -> Boolean): Map<String, Double> {
    return scores.filter(rule).groupBy({it.classId}, {it.score}).mapValues{it.value.average()}
}

fun main(){
//    val list = list.pinkNum{it % 4 == 0}
//    println(list)
//    val list = list.filterMap({it % 2 == 0}, {it * 2})
//    println(list)
    val s = Score("001", "002", 100.0)
    val list = s.processScore()
}
  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-05-23 23:26
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    这个高阶函数是processScore,它可以用来处理Score对象的List,并根据传入的规则进行过滤聚合。具体地,它的参数包括:

    1. scores: List,Score对象的List,需要处理的数据集合;
    2. rule: (Score) -> Boolean,一个在函数外部定义的 lambda 函数,它接受一个 Score 对象参数,返回一个 Boolean 值,表示这个 Score 对象是否需要被处理。

    该函数返回一个 Map<String, Double> 类型的结果集,其中包含了聚合后每个 classId 对应的分数平均值。

    调用该函数的方式如下:

    1. 首先需要构造一个 Score 对象的 List,例如:
    val scores = listOf(
        Score("001", "001", 80.0),
        Score("001", "002", 90.0),
        Score("002", "001", 85.0),
        Score("002", "002", 95.0)
    )
    
    1. 然后定义一个 lambda 函数,作为规则,例如:Score对象的分数大于等于90分。
    val rule: (Score) -> Boolean = { score -> score.score >= 90 }
    
    1. 最后调用 processScore 函数并传入 scores 和 rule,如下:
    val result = processScore(scores, rule)
    

    此时,result 的值为:

    {
        "001": 90.0,
        "002": 95.0
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月23日