加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – 从List中获取带有扭曲的唯一值

发布时间:2020-12-16 18:27:03 所属栏目:安全 来源:网络整理
导读:我有一个这样的列表: val l= List(("Agent","PASS"),("Agent","FAIL"),("Agent 1",("Agent 2","PASS") ) 我需要得到一个这样的列表: val filteredList= List(("Agent","PASS") ) 发生了什么? ("Agent","FAIL") 变 ("Agent","FAIL") (因为如果至少有一次失
我有一个这样的列表:

val l= List(("Agent","PASS"),("Agent","FAIL"),("Agent 1",("Agent 2","PASS") )

我需要得到一个这样的列表:

val filteredList= List(("Agent","PASS") )

发生了什么?

("Agent","FAIL")

("Agent","FAIL")

(因为如果至少有一次失败,我需要保留该条目)

代理1和代理2的条目保持不变,因为每个条目只有一个条目.

我找到的最接近的答案是
How in Scala to find unique items in List但是我不知道如何保留FAIL的条目.

我希望这个问题很清楚,如果没有,我可以给你一个更好的例子.

谢谢

解决方法

这是你想要的吗?

jem@Respect:~$scala
Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM,Java 1.6.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val l= List(("Agent","PASS") )
l: List[(java.lang.String,java.lang.String)] = List((Agent,PASS),(Agent,FAIL),(Agent 1,(Agent 2,PASS))

scala> l.foldLeft(Map.empty[String,String]){(map,next) =>
     |   val (agent,result) = next
     |   if ("FAIL" == result) map.updated(agent,result)
     |   else {           
     |     val maybeExistingResult = map.get(agent)
     |     if (maybeExistingResult.map(_ == "FAIL").getOrElse(false)) map
     |     else map.updated(agent,result)
     |   }
     | }
res0: scala.collection.immutable.Map[String,String] = Map((Agent,PASS))

scala> res0.toList
res1: List[(String,String)] = List((Agent 2,FAIL))

或者这是一个更短,更模糊的解决方案:

scala> l.groupBy(_._1).map(pair => (pair._1,pair._2.reduceLeft((a,b) => if ("FAIL" == a._2 || "FAIL" == b._2) (a._1,"FAIL") else a))).map(_._2).toList
res2: List[(java.lang.String,java.lang.String)] = List((Agent 2,FAIL))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读