Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提取ArrayList的元素<;字符串>;作为Hashmap的一部分_Java_List_Dictionary_Arraylist_Hashmap - Fatal编程技术网

Java 提取ArrayList的元素<;字符串>;作为Hashmap的一部分

Java 提取ArrayList的元素<;字符串>;作为Hashmap的一部分,java,list,dictionary,arraylist,hashmap,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

我有以下代码:

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);
    }
}
for(Map.Entry>条目:data.entrySet()){
整数key=entry.getKey();
ArrayListvalue=entry.getValue();
for(字符串aString:value){
System.out.println(“键:+key+”值:+aString);
}
}
Hashmap声明为

Map<Integer, List<String>> data = new HashMap<>();
Map data=newhashmap();
在通过循环和
put
方法填充之前

我现在需要迭代字符串的
ArrayList
,或者更好,通过索引检索特定元素。。为了操纵。我已经尽我所能进行了研究,似乎已经用上面的代码找到了答案。它是从一段时间前这里给出的答案复制而来的

然而,当我试图使用它时,它会抱怨“不兼容类型”,顶行用红色下划线一直到冒号

  • 必填项:
    条目
  • 找到:
    条目

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

更改
映射数据=新的HashMap()
to
Map data=newhashmap()

请尝试以下代码:

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);
            }
for(Map.Entry:data.entrySet()){
整数key=entry.getKey();
列表值=entry.getValue();
for(字符串aString:value){
System.out.println(“键:+key+”值:+aString);
}

在您拥有
列表
界面和
ArrayList
实现的情况下,您在映射声明中正确使用了
列表
类型,但在循环中传递了声明实现(
ArrayList

由于以下声明,问题出现:

Map<Integer, List<String>> data = new HashMap<>();
Map data=newhashmap();
空菱形表示法为
列表的实现留下了许多选项。它可以是ArrayList、LinkedList等。因此您无法确定编译器是否会使用
ArrayList
实现


为了支持代码的可扩展性,建议对接口进行所谓的编程。最好尽可能保持最通用的类型,以避免将代码耦合到特定的实现,也就是说,当需要对其执行某些具体操作时,您将指定实现。

再次编程测试接口,而不是针对实现

映射的类型是
Integer
作为键和
List
作为值。因此,您只能使用非常相同的结构循环条目

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);
    }
}
for(Map.Entry>Entry:data.entrySet()){
整数key=entry.getKey();
列表值=entry.getValue();
for(字符串aString:value){
System.out.println(“键:+key+”值:+aString);
}
}

将您的条目更改为from
entry多谢大家!!这是一个新的条目,所以有点像曲线!!…然而,可能是我熟知的“家庭失明”状况在这里盛行,就像在我的脑海中,我用ArrayList定义了HashMap…但不是“直到有人指出我有一个列表,我的视力集中在什么是真实的。”这将解决问题,但对于未来的读者来说,不建议这样做。尽可能使用抽象,在本例中,使用接口列表而不是实现ArrayList。这是可靠的原则之一。@CrazySabath我同意。