Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 地图上没有这样的元素,为什么?_Java_Generics_Collections_Java 8 - Fatal编程技术网

Java 地图上没有这样的元素,为什么?

Java 地图上没有这样的元素,为什么?,java,generics,collections,java-8,Java,Generics,Collections,Java 8,我正在编写一个代码,在这个代码中,如果我尝试数组一切正常,但当我尝试用列表解决该示例时,它会显示出来 Exception in thread "main" java.util.NoSuchElementException at java.util.AbstractList$Itr.next(Unknown Source) at com.delete.files.DeleatingFiles.check(DeleatingFiles.java:27) at com.d

我正在编写一个代码,在这个代码中,如果我尝试数组一切正常,但当我尝试用列表解决该示例时,它会显示出来

   Exception in thread "main" java.util.NoSuchElementException
    at java.util.AbstractList$Itr.next(Unknown Source)
    at com.delete.files.DeleatingFiles.check(DeleatingFiles.java:27)
    at com.delete.files.DeleatingFiles.main(DeleatingFiles.java:60)
代码是:

Map<String, String> map = new HashMap<String, String>();
        File folder = new File("F://fileIO/");
        if (folder.isDirectory()) {
            List<File> filesName = Arrays.asList(folder.listFiles());
            Iterator<File> itList = filesName.listIterator();
            while (itList.hasNext()) {
                map.put(itList.next().getName(), itList.next().toString());
            }
            System.out.println(map);
                }
        } else {
            System.err.println("something is wrong");
        }
    }
Map Map=newhashmap();
文件夹=新文件(“F://fileIO/”);
if(folder.isDirectory()){
List filesName=Arrays.asList(folder.listFiles());
迭代器itList=filename.listIterator();
while(itList.hasNext()){
put(itList.next().getName(),itList.next().toString());
}
系统输出打印项次(map);
}
}否则{
System.err.println(“出现了问题”);
}
}
编辑1:我只是想用绝对路径将文件名保存为键值对。 编辑2:不能使用as
String
next=itrList。next()as迭代器属于文件类型

现在,谁能告诉我问题的原因?? 如果有什么问题,请告诉我


谢谢。

您的代码调用了
next
两次,因此如果
itList
的元素数为奇数,那么最后一次调用将导致
NoSuchElementException

以下是修复代码的方法:

while (itList.hasNext()) {
    // Call "next()" once
    File next = itList.next();
    // Use "next" as many times as you need
    map.put(next.getName(), next.toString());
}
有没有其他方法可以在不使用数组的情况下做到这一点

通过切换到“for each”循环,您可以大大简化迭代:


现在,您的代码不会创建不必要的列表副本,并且没有了
NoSuchElementException
错误。

您的代码调用了
next
两次,因此如果
itList
的元素数为奇数,最后一次调用将导致
NoSuchElementException

以下是修复代码的方法:

while (itList.hasNext()) {
    // Call "next()" once
    File next = itList.next();
    // Use "next" as many times as you need
    map.put(next.getName(), next.toString());
}
有没有其他方法可以在不使用数组的情况下做到这一点

通过切换到“for each”循环,您可以大大简化迭代:

现在,您的代码不会创建不必要的列表副本,并且不存在
NoSuchElementException
bug。

在您的代码
map.put(itList.next().getName(),itList.next().toString())中调用next()两次,即使您选中
itList.hasNext()
一次

while (itList.hasNext()) { // Check once
   map.put(itList.next().getName(), itList.next().toString()); // next() Call twice here
}
您的代码可能需要更正如下

Map<String, String> map = new HashMap<String, String>();
    File folder = new File("F://fileIO/");
    if (folder.isDirectory()) {
        List<File> filesName = Arrays.asList(folder.listFiles());
        Iterator<File> itList = filesName.listIterator();
        File file;
        while (itList.hasNext()) {
            file = itList.next();
            map.put(file.getName(), file.toString());
        }
        System.out.println(map);
    } 
    else {
        System.err.println("something is wrong");
    }
Map Map=newhashmap();
文件夹=新文件(“F://fileIO/”);
if(folder.isDirectory()){
List filesName=Arrays.asList(folder.listFiles());
迭代器itList=filename.listIterator();
文件;
while(itList.hasNext()){
file=itList.next();
map.put(file.getName(),file.toString());
}
系统输出打印项次(map);
} 
否则{
System.err.println(“出现了问题”);
}
在您的代码中
map.put(itList.next().getName(),itList.next().toString())调用next()两次,即使您选中
itList.hasNext()
一次

while (itList.hasNext()) { // Check once
   map.put(itList.next().getName(), itList.next().toString()); // next() Call twice here
}
您的代码可能需要更正如下

Map<String, String> map = new HashMap<String, String>();
    File folder = new File("F://fileIO/");
    if (folder.isDirectory()) {
        List<File> filesName = Arrays.asList(folder.listFiles());
        Iterator<File> itList = filesName.listIterator();
        File file;
        while (itList.hasNext()) {
            file = itList.next();
            map.put(file.getName(), file.toString());
        }
        System.out.println(map);
    } 
    else {
        System.err.println("something is wrong");
    }
Map Map=newhashmap();
文件夹=新文件(“F://fileIO/”);
if(folder.isDirectory()){
List filesName=Arrays.asList(folder.listFiles());
迭代器itList=filename.listIterator();
文件;
while(itList.hasNext()){
file=itList.next();
map.put(file.getName(),file.toString());
}
系统输出打印项次(map);
} 
否则{
System.err.println(“出现了问题”);
}

如前所述,您在每个循环中调用了两次
next
。它也可以通过使用流来解决

Map Map=newhashmap();
文件夹=新文件(“F://fileIO/”);
if(folder.isDirectory()){
map=Arrays.asList(folder.listFiles())
.stream()
.collect(Collectors.toMap)(文件::getName,
对象::toString));
系统输出打印项次(map);
}否则{
System.err.println(“出了点问题!”);
}

Map Map=folder.isDirectory?
map=Arrays.asList(folder.listFiles())
.stream()
.collect(Collectors.toMap)(文件::getName,
对象::toString():
新的HashMap();

如前所述,您在每个循环中调用了两次
next
。它也可以通过使用流来解决

Map Map=newhashmap();
文件夹=新文件(“F://fileIO/”);
if(folder.isDirectory()){
map=Arrays.asList(folder.listFiles())
.stream()
.collect(Collectors.toMap)(文件::getName,
对象::toString));
系统输出打印项次(map);
}否则{
System.err.println(“出了点问题!”);
}

Map Map=folder.isDirectory?
map=Arrays.asList(folder.listFiles())
.stream()
.collect(Collectors.toMap)(文件::getName,
对象::toString():
新的HashMap();

谢谢您的回复。我已经试过了,因为列表和迭代器是文件类型,所以不能这样做。@PankajPathania啊,你是对的,
next
应该是
File next
,而不是
String next
。这不会起作用,因为它是File类型的,而不是String。从文件名转换为String,文件路径已经在String中了,或者我应该改为Map???@PankajPathania
getName()
字符串的形式返回文件名,并且
toString()
生成一个文件路径,因此
Map
很好。谢谢回复。我已经试过了,因为列表和迭代器是文件类型,所以不能这样做。@PankajPathania啊,你是对的,
next
应该是
File next
,而不是
String next
。这不起作用,因为列表是File类型,而不是String。从File na转换过来怎么样