List<Map<String, String>> recordMapList = new ArrayList<HashMap<String,String>>();
A linha acima dá o erro: incompatibilidade de tipo: não é possível converter ArrayList> para a lista>
Mas a questão vai embora se o uso HashMap em vez de Mapa no lado esquerdo. Alguém poderia me dizer por que isso acontece. Eu preciso ter o lado esquerdo para conter Mapa como eu poderia estar usando a mesma variável para LinkedHashMap atribuir no lado righ como,
List<Map<String, String>> recordMapList = new ArrayList<LinkedHashMap <String,String>>();
Por favor ajude.
Embora ArrayList
é uma sub classe de List
, e Map
é uma subclasse de HashMap
, um List<Map>
não é uma subclasse de List<HashMap>
. Da mesma forma você não pode lançar uma List<HashMap>
a uma List<Map>
. Se pudéssemos, isso significaria que poderíamos adicionar digamos que um TreeMap
ao nosso List<Map>
, e depois lançá-lo a um List<HashMap>
, violando assim o contrato original do List<HashMap>
.
Pessoalmente, eu iria usar apenas um operador de diamante (Java 7+) se o recordMapList
-instance é imediatamente criada:
List<Map<String, String>> recordMapList = new ArrayList<>();
E se ele é criado em outra parte apenas o List
pode ser um ArrayList
, mas o resto seria a mesma. (NOTA: Você poderia, naturalmente, ainda usar o operador de diamante aqui também, mas se a criação da instância eo campo real são separados, eu, pessoalmente, prefiro usar os tipos de modo fica claro imediatamente que tipo vai para a lista, sem saltar para o campo real no código.)
List<Map<String, String>> recordMapList;
...
recordMapList = new ArrayList<Map<String, String>>();
Em ambos os casos, você pode adicionar suas HashMap<String, String>
instâncias para o recordMapList
.