📅  最后修改于: 2023-12-03 15:34:50.128000             🧑  作者: Mango
retain()
方法是 Scala Map 集合类中的一个函数,作用是过滤掉不符合条件的键值对,只保留符合条件的键值对。
retain
方法的签名如下:
def retain(p: (K, V) => Boolean): This
其中,p
是一个函数,它接受两个参数,表示 Map 中的键值对,返回一个 Boolean 值,表示对该键值对是否应该被保留。This
表示方法调用的 Map 对象本身。
返回值是一个新的 Map 集合对象,其中只包含符合条件的键值对。
下面是一个使用 retain()
方法的示例:
object RetainExample extends App {
val scores = Map("Alice" -> 90, "Bob" -> 80, "Charlie" -> 95, "Dave" -> 70)
// 过滤掉分数低于80分的学生
val highScores = scores.retain((name, score) => score >= 80)
println(highScores) // 输出 Map(Alice -> 90, Bob -> 80, Charlie -> 95)
}
注:上述代码中的 scores
是一个 Map 集合对象,表示四名学生的考试成绩;retain()
方法过滤掉了分数低于 80 分的学生,只保留了分数大于等于 80 分的学生。最终输出结果为 Map(Alice -> 90, Bob -> 80, Charlie -> 95)
。
在上述示例中,我们使用了一个简单的 lambda 表达式作为 p
参数。lambda 表达式接受 name
和 score
两个参数,判断 score
是否大于等于 80 分。如果大于等于 80 分,则返回 true
,否则返回 false
。这样,retain()
方法就可以根据 lambda 表达式的返回值,保留或者过滤掉符合条件的键值对。
另外需要注意的是,retain()
方法会修改 Map 对象本身,将原来不符合条件的键值对删除。如果需要保留原 Map 对象不变,可以先将原 Map 对象复制一份,然后再调用 retain()
方法。示例如下:
object RetainExample2 extends App {
val scores = Map("Alice" -> 90, "Bob" -> 80, "Charlie" -> 95, "Dave" -> 70)
// 复制 scores 对象,然后过滤掉分数低于80分的学生
val highScores = scores.clone().retain((name, score) => score >= 80)
println(highScores) // 输出 Map(Alice -> 90, Bob -> 80, Charlie -> 95)
println(scores) // 输出 Map(Alice -> 90, Bob -> 80, Charlie -> 95, Dave -> 70)
}
注:上述代码中的 scores
是一个 Map 集合对象,表示四名学生的考试成绩;首先使用 clone()
方法复制了一份 scores
对象,然后再调用 retain()
方法过滤掉了分数低于 80 分的学生,得到了新的 Map 集合对象 highScores
。最终输出结果中,highScores
只包含符合条件的键值对,而 scores
保持不变,仍包含所有的键值对。
以上就是 Scala Map retain()
方法的介绍和示例。