提取ArrayList <string>的元素作为Hashmap的一部分

时间:2018-09-27 10:04:39

标签: java list dictionary arraylist hashmap

我有以下代码:

for (Map.Entry < Integer, ArrayList < String >> entry: data.entrySet()) {
    Integer key = entry.getKey();
    ArrayList < String > value = entry.getValue();
    for (String aString: value) {
        System.out.println("key : " + key + " value : " + aString);
    }
}

Hashmap声明为

Map<Integer, List<String>> data = new HashMap<>();

在通过循环和put方法填充它之前。

我现在需要迭代字符串ArrayList或更好的字符串,按索引检索特定元素以进行操作。我已经竭尽所能,似乎已经用上述代码找到了答案。它是从前段时间给出的答案中复制而来的。

但是,当我尝试使用它时,会抱怨“不兼容的类型”,其顶行用红色下划线标记到冒号。

  • 必填:Entry <Integer,java.util.List<java.lang.String>>
  • 找到了:Entry <Integer,java.util.ArrayList<java.lang.String>>

4 个答案:

答案 0 :(得分:1)

因为您在Hashmap中将值类型声明为List<String>,并且在ArrayList<String>中将Map.Entry声明为值类型for loop

更改Map<Integer, List<String>> data = new HashMap<>();Map<Integer, ArrayList<String>> data = new HashMap<>();

答案 1 :(得分:1)

在您的情况下,您拥有List接口和ArrayList实现,您已在地图的声明中正确使用了List类型,但是您转而声明了一个实现( ArrayList)。

问题由于以下原因而出现:

Map<Integer, List<String>> data = new HashMap<>();

空菱形符号为List<String>的实现留下了许多选择。它可以是ArrayList,LinkedList等。因此,您不能确定编译器将使用ArrayList实现。

建议您执行代码称为针对接口编程,以支持代码可扩展性。保持最通用的类​​型总是好的,只要可以避免将代码耦合到特定的实现即可,也就是说,当需要对它执行一些具体操作时,您将指定实现。

答案 2 :(得分:0)

尝试以下代码:

for (Map.Entry<Integer, List<String>> entry : data.entrySet()) {
       Integer key = entry.getKey();
       List<String> value = entry.getValue();
       for(String aString : value){
            System.out.println("key : " + key + " value : " + aString);
            }

答案 3 :(得分:0)

针对接口而不是针对实现进行编程。

地图的类型为Integer作为键,List<String>作为值。因此,您只能以相同的结构循环这些条目。

for (Map.Entry < Integer, List < String >> entry: data.entrySet()) {
    Integer key = entry.getKey();
    List <String> value = entry.getValue();
    for (String aString: value) {
        System.out.println("key : " + key + " value : " + aString);
    }
}