Java 如何将路径逐行读取到HashMap中

Java 如何将路径逐行读取到HashMap中,java,path,hashmap,Java,Path,Hashmap,您好,我正在尝试读取一个文件(words.txt),其中包含一个大的英语单词列表到一个Hashmap中。我正在使用路径访问文件。我的函数传入一个正在打开的路径,并尝试将内容输入HashMap。我可以逐字打印路径的所有值,但在将值存储到HashMap中时遇到问题。我正在尝试制作一个比我的O(n)ArrayList实现更好的拼写检查器。在我尝试用Trie或BKTree解决它之前,我想用HashMap解决它 小结:如何将以Path打开的word.txt文件放入HashMap中 我的代码 private

您好,我正在尝试读取一个文件(words.txt),其中包含一个大的英语单词列表到一个Hashmap中。我正在使用路径访问文件。我的函数传入一个正在打开的路径,并尝试将内容输入HashMap。我可以逐字打印路径的所有值,但在将值存储到HashMap中时遇到问题。我正在尝试制作一个比我的O(n)ArrayList实现更好的拼写检查器。在我尝试用Trie或BKTree解决它之前,我想用HashMap解决它

小结:如何将以Path打开的word.txt文件放入HashMap中

我的代码
private static void createMap(路径文件)引发异常{
Map theWords=newhashmap();
整数计数=0;
try(Stream=Files.lines(dictFile)){
stream.forEach(theWords.put(count++,stream));
//stream.forEach(System.out::println);
}捕获(IOE异常){
e、 printStackTrace();
}
}

System.out::println
是一个方法引用,而
words.put(count++,stream)
不是。此外,正如Boris已经指出的,该流将被添加到地图中,而不是单个单词

一个正确的lambda表达式可能看起来像
word->theWords.put(count++,word)
,但由于
count
变量不是有效的final变量,因此也无法在lambda表达式中更改它

如果目的是能够快速查找字典文件中是否包含特定单词,那么
Set
也就足够了,代码可以如下所示:

HashSet<String> theWords = Files.lines(dictFile)
        .collect(Collectors.toCollection(HashSet::new));

对于不区分大小写的查找,请使用
()->new TreeSet(String.case不区分大小写顺序)
而不是
HashSet::new
系统。out::println
是方法引用,而
单词。put(count++,stream)
不是。此外,正如Boris已经指出的,该流将被添加到地图中,而不是单个单词

一个正确的lambda表达式可能看起来像
word->theWords.put(count++,word)
,但由于
count
变量不是有效的final变量,因此也无法在lambda表达式中更改它

如果目的是能够快速查找字典文件中是否包含特定单词,那么
Set
也就足够了,代码可以如下所示:

HashSet<String> theWords = Files.lines(dictFile)
        .collect(Collectors.toCollection(HashSet::new));

对于不区分大小写的查找,请使用
()->new TreeSet(String.case\u insensitive\u ORDER)
而不是
HashSet::new

什么是
count
?为什么要重复将
0,stream
放入
Map
?您可能需要了解lambdas-您似乎没有正确使用
forEach
。我相信您需要给它一个键(整数)和一个字符串。您不是将
字符串作为值,而是将
放在一起。您需要了解lambda-您需要接受传递到
消费者
的值,这是
forEach
的参数。另外,您只是将项目按索引添加到
地图中
——这与
列表
有什么不同?使用
Map
的目的是什么?我将使用HashMap创建拼写检查器。什么是
count
?为什么要重复将
0,stream
放入
Map
?您可能需要了解lambdas-您似乎没有正确使用
forEach
。我相信您需要给它一个键(整数)和一个字符串。您不是将
字符串作为值,而是将
放在一起。您需要了解lambda-您需要接受传递到
消费者
的值,这是
forEach
的参数。另外,您只是将项目按索引添加到
地图中
——这与
列表
有什么不同?使用
映射的目的是什么?我将使用HashMap创建拼写检查器。因此,当返回true时,如何访问实际值?只是一个theWords.get(value)?我找到了一个解决方法,只需将一个temp设置为您检查是否包含true的值,然后返回找到的temp字符串。因此,当返回true时,我如何访问实际值?只是一个theWords.get(value)?我找到了一个解决方法,将一个临时值设置为您检查是否包含true的值,并返回找到的临时字符串。
theWords.contains("hello");