将列表列表传递给 Map 值时,Map 中的 Java 嵌套列表返回错误

标签 java dictionary generics hashmap nested-lists

我有一个名为 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/

相关文章:

java - 从最频繁的 X 条目的多重集中获取有序子集

mysql - 美国 map 与州边界 - 根据计算值更改颜色

c# - 基本泛型接口(interface)上的扩展方法

Java 泛型集合,无法将列表添加到列表

c# - 参数中 C# 中泛型的问题

java - com.gargoylesoftware.htmlunit.ElementNotFoundException : elementName=[form] attributeName=[name] attributeValue=[docSearch]

JavaFX + Spring boot 实现

java - 如何使用 GridBagLayout 使 JLabel 1 列宽,然后使 JTextField 2 列宽(总宽度 3 列)

java - 在 Java 8 中合并多个 map

python - 为什么列表不保存元素?