J'ai une classe appelée ZipClass qui contient essentiellement deux méthodes statiques: - ZipToList() pour mettre deux listes de même taille dans les listes des listes; et - ZipToMapList() pour mettre la liste des valeurs en tant que clés et listes de listes en tant que valeurs pour les clés.Java listes imbriquées dans la carte renvoie une erreur lors du passage d'une liste de listes à des valeurs de carte
Première méthode fonctionne très bien:
public static <T> List<List<T>> zipToList(List<T> list1,List<T> list2)
{
List<T> tuple = new ArrayList<>(); //a list for pair of values from from same columns (fields)
List<List<T>> tuples = new ArrayList<>(); // a list of lists
if(list1.size() == list2.size()) //check that size of lists the same
{
for(int idx = 0; idx < list1.size(); idx ++)
{
//feed tuple with the pair of values
tuple.add(list1.get(idx));
tuple.add(list2.get(idx));
//feed list of lists with the list of paired values
tuples.add(copyList(tuple));
//clear pair for the next iteration
tuple.clear();
}
} else System.out.println("Lists must be of same size");
return tuples;
}
Ma deuxième méthode:
public static <K,V extends List<?>> Map<K,List<?>> zipToMapList(List<K> keys,List<List<?>> values)
{
Map<K,List<?>> dataMap = new HashMap<>();
for(int idx = 0; idx < keys.size(); idx ++)
{
dataMap.put(keys.get(idx), values.get(idx));
}
return dataMap;
}
J'ai deux listes qui contiennent des valeurs entières: valeurs1 et VALUES2 et j'ai liste des clés qui détient Valeurs de chaîne: touches lorsque j'essaie d'imprimer le contenu de dataMap: System.out.println (zipToMapList (keys, zipToList (values1, values2))); il y a un message d'erreur:
The method zipToMapList(List<K>, List<List<?>>) in the type ZipClass is not applicable for the arguments (List<String>, List<List<Integer>>)
méthode zipToList() fonctionne très bien, mais je ne peux pas comprendre ce qui se passe exactement dans ma deuxième méthode, je suppose que c'est quelque chose à voir avec:
<K,V extends List<?>>
Donc "K" est un type de référence générique pour les clés. V étend List et présume contenir tout type de liste et un interne se rapporte à tout type de liste. Après googling, je me rends compte que c'est probablement un moyen illégal, mais je ne comprends pas pourquoi. Quelqu'un peut-il expliquer pourquoi? et quel est le moyen de surmonter ce problème?
Merci beaucoup!
Vous n'utilisez pas 'V' partout dans' zipToMapList' , alors pourquoi en avez-vous besoin? – Eran