Scala中Map的_._1、_._2作用解析及代码输出疑问
关于Scala Map中
_._1/_._2的作用及代码逻辑解析 一、_._1和_._2的含义
Scala里的Map本质是键值对二元组(Tuple2)的集合,每个键值对都可看作(Key, Value)的结构:
_._1:是Scala匿名函数的占位符语法,代表当前遍历到的二元组的第一个元素(即Map的键)_._2:代表当前遍历到的二元组的第二个元素(即Map的值)
比如遍历myMap里的DataGroup.REAL -> SEQ(A,B,C)键值对时:
_._1对应DataGroup.REAL_._2对应SEQ(A,B,C)
二、查找代码的运行逻辑拆解
我们逐段分析这段代码的执行过程:
DataMapping.myMap.find(_._2.contains(Y)).map(_._1).get
1. myMap.find(_._2.contains(Y))
find是Map的遍历方法,会逐个检查每个键值对:- 对每个键值对,用
_._2取出对应的值(SEQ集合),调用contains(Y)判断集合是否包含Y - 找到第一个满足条件的键值对后停止遍历,返回
Some(该键值对);若遍历完无匹配项,返回None - 你的Map中
DataGroup.CEAL对应的SEQ(X,Y)包含Y,因此这一步返回Some((DataGroup.CEAL, SEQ(X,Y)))
- 对每个键值对,用
2. .map(_._1)
- 这里的
map是Option类型的方法(find返回值为Option),用于转换Option内部的元素:- 把
Some((DataGroup.CEAL, SEQ(X,Y)))中的二元组,通过_._1取出它的键(即DataGroup.CEAL) - 因此这一步返回
Some(DataGroup.CEAL)
- 把
3. .get
get是Option的方法,用于取出Option内部的值:- 若为
Some(x),直接返回x;若为None,会抛出NoSuchElementException - 这里已有匹配结果,因此返回
DataGroup.CEAL
- 若为
三、最终输出结果
这段代码的输出结果是:DataGroup.CEAL
内容的提问来源于stack exchange,提问作者Julie
相关产品推荐
相关产品推荐

