Работа с Type Erasure с помощью foldLeft

У меня есть список, содержащий смесь строк и карт, listOfIds. Код ниже пытается получить этот список. Сопоставляется с совпадающими, а строки — с несовпадающими.

val (matched, unmatched) =
  listOfIds.foldLeft(List.empty[Map[String, String]], List.empty[String]) {
     case ((matched, unmatched), p) => p match {
       case m:Map[String, String] => (m :: matched, unmatched)
       case s:String => (matched, s :: unmatched)
     }
   }

Проблема в том, что я сталкиваюсь со стиранием типа. Я обнаружил, что могу использовать заполнители для типов, чтобы обойти это m:Map[_, _], но позже это вызывает проблемы при попытке извлечь значения карты.

Я не знаком с тегами типов, но быстрое исследование показывает, что это может быть решением... Буду признателен за любые советы, как я могу обойти стирание типа в этом случае.

Спасибо!


person kidshenlong    schedule 29.12.2015    source источник
comment
Вы можете найти решение своей проблемы type erasure здесь: stackoverflow.com/questions/1094173/ . foldLeft может быть не оптимальным методом здесь. Вы смотрели на partition в Seq-Черте, похоже, это хорошо подходит?   -  person Andreas Neumann    schedule 29.12.2015
comment
Проблема с разделением заключается в том, что списки возврата имеют одинаковую подпись. Я полагаю, что это не самая плохая проблема, так как мне просто нужно ее сгладить, но все же. Спасибо за ссылку, сейчас посмотрю, что можно собрать.   -  person kidshenlong    schedule 29.12.2015
comment
Какой тип listOfIds?   -  person Kevin Meredith    schedule 29.12.2015
comment
Банкомат это List[Object]   -  person kidshenlong    schedule 29.12.2015
comment
Какую ошибку вы получаете? Кажется, работает для меня ...   -  person Dima    schedule 29.12.2015