Скажем, у меня есть этот код, чтобы выяснить Dups в списке на основе параметра конструктора: (я закончил с этим после разбора некоторых текстовых файлов, которые имеют дубликаты.)Как фильтровать список с другим списком на основе некоторых условий?
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, чтобы отфильтровать дубликаты на основе некоторых других правил?
В конце концов, я хочу иметь список без дубликатов, но я также хочу сохранить как можно больше информации из свойств ini
и com
. Это означает, что я хочу сохранить дубликат, который следует одно из следующих правил:
Линии с содержанием в собственности
ini
иcom
имеют приоритет над всеми остальными, а это означает:Line("X", "hello", "some text")
противLine("", "hello", "some text")
противLine("", "hello", "")
следует отдать первымЛиния с содержанием в собственности
com
имеет приоритет надini
, что означает:Line("", "hello", "")
противLine("", "hello", "some text")
должен отдать последние одинЛиния с содержанием в собственности
ini
имеет приоритет над линиями с чем в INI или ком, то есть:Line("X", "hello", "")
противLine("", "hello", "")
должен вернуть первыйв случае, если оба дубликаты имеют информацию в
ini
иcom
, я не Не заботьтесь о том, какой из них выбран.
Интересно, не слишком ли это сложно, и может быть другой способ решить эту проблему. Все, что я хочу выполнить, - это список, в котором больше нет дубликатов, в то же время сохраняя этот дубликат, который имел большую информацию об этом. Как бы это решить?
Потрясающие ! Короткий и очень понятный. – User1232187