我有一个名为 ZipClass 的类,它基本上只包含两个静态方法: - ZipToList() 将两个相同大小的列表放入列表列表中;和 - ZipToMapList() 将值列表作为键并将列表列表作为键的值。
第一种方法效果很好:
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;
}
我的第二种方法:
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;
}
我有两个包含整数值的列表:values1 和values2 我有保存字符串值的键列表:keys 当我尝试打印 dataMap 的内容时: System.out.println(zipToMapList(keys,zipToList(values1,values2))); 有错误消息:
The method zipToMapList(List<K>, List<List<?>>) in the type ZipClass is not applicable for the arguments (List<String>, List<List<Integer>>)
zipToList() 方法工作得很好,但我无法理解第二个方法中到底发生了什么,我想这与以下内容有关:
<K,V extends List<?>>
因此“K”是键的通用引用类型。 V 扩展 List 并假定保存任何类型的 List,并且内部与 List 的任何类型相关。 谷歌搜索后,我意识到这可能是一种非法方式,但不明白为什么。 谁能解释一下为什么吗?解决这个问题的方法是什么?
非常感谢!
最佳答案
由于您没有在 zipToMapList
方法中的任何位置使用泛型类型参数 V
,因此我建议将其用于 List
的元素类型:
public static <K,V> Map<K,List<V>> zipToMapList(List<K> keys,List<List<V>> values)
{
Map<K,List<V>> dataMap = new HashMap<>();
for(int idx = 0; idx < keys.size(); idx ++ )
{
dataMap.put(keys.get(idx), values.get(idx));
}
return dataMap;
}
关于将列表列表传递给 Map 值时,Map 中的 Java 嵌套列表返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782881/