Scala中如何筛选Map中键名包含后缀001的键并获取对应值
实现方案
你可以通过Scala集合的filter方法结合字符串匹配逻辑快速完成筛选:
单个Map筛选
针对单个Map,直接判断键是否以001为后缀即可:
val testMap = Map( "Y1A0001_001" -> "CU", "Y1D0003" -> "A011", "Y1C0002" -> "20211030", "Y1D0000" -> "four", "Y1D0002" -> "Today only", "Y1C0001" -> "123123", "Y1B0003" -> "005", "Y1D0001" -> "CitizenID", "Y1C0000" -> "Customer" ) // 筛选得到符合要求的键值对 val resultKV = testMap.filter { case (key, _) => key.endsWith("001") } // 仅提取符合要求的值 val resultValues = resultKV.values.toList
执行后resultKV输出为Map(Y1A0001_001 -> CU, Y1C0001 -> 123123, Y1D0001 -> CitizenID),完全匹配需求。
多个Map批量处理
如果需要批量处理一批Map,在外层套遍历即可:
val mapList = List( Map("Y1A0001_001" -> "CU", "Y1D0003" -> "A011", "Y1C0002" -> "20211030", "Y1D0000" -> "four", "Y1D0002" -> "Today only", "Y1C0001" -> "123123", "Y1B0003" -> "005", "Y1D0001" -> "CitizenID", "Y1C0000" -> "Customer"), Map("Y1A0001_001" -> "CU", "Y1D0003" -> "A011", "Y1C0002" -> "20210928", "Y1D0000" -> "five", "Y1D0002" -> "Today only", "Y1C0001" -> "133213", "Y1B0003" -> "006", "Y1D0001" -> "Drive License", "Y1C0000" -> "Director"), Map("Y1A0001_001" -> "CU", "Y1D0003" -> "A011", "Y1C0002" -> "20210927", "Y1D0000" -> "six", "Y1D0002" -> "Both", "Y1C0001" -> "452234324", "Y1B0003" -> "007", "Y1D0001" -> "CitizenID", "Y1C0000" -> "Messenger") ) // 逐个筛选每个Map的符合项 val allResult = mapList.map(_.filter { case (key, _) => key.endsWith("001") })
如果你需要的是筛选键任意位置包含001而非仅后缀,把endsWith("001")替换为contains("001")即可。
内容的提问来源于stack exchange,提问作者SatriaNegaraaa
相关产品推荐
相关产品推荐

