比方说,我有这样的代码要弄清楚的DUP基于构造函数的参数列表:(我结束了这个解析其中有重复一些文本文件后)。如何基于某些条件过滤列表与另一个列表?
case class Line(ini: String, name:String, com:String)
val l0 = Line("X", "hello", "some text")
val l1 = Line("", "world", "some text")
val l2 = Line("X", "computer", "")
val l3 = Line("", "hello", "")
val l4 = Line("X", "world", "")
val l5 = Line("", "hello", "some stuff")
val lineList = List(l0,l1,l2,l3, l4, l5)
val dup = lineList.groupBy(_.name).collect { case (x, List(_,_,_*)) => x } // should yield List("hello", "world")
现在我知道哪一个是一个副本。但是我怎么能再次过滤lineList来根据其他规则过滤掉dups?
最后我想要一个没有重复的列表,但我也想尽可能多地保留属性ini
和com
的信息。这意味着我要保留遵循以下规则之一重复:
线与内容财产
ini
和com
优先于所有其他人,这意味着:Line("X", "hello", "some text")
VSLine("", "hello", "some text")
VSLine("", "hello", "")
应归还第一线,财产内容
com
优先于ini
,意思是:Line("", "hello", "")
VSLine("", "hello", "some text")
应该给后面的最后一个 条
线,财产内容
ini
优先于有没有在INI或COM口,意思是:Line("X", "hello", "")
VSLine("", "hello", "")
应归还第一的情况下,两个副本在
ini
和com
有信息,我不不关心选择哪一个。
我不知道这是不是过于复杂,可能有另一种方法来解决这个问题。我想要完成的是一个列表,它没有更多的重要信息,同时保留那些信息最多的重复信息。如何解决这个问题?
真棒!简短而且非常易于理解。 – User1232187