Java 从HashMap中的路径返回字符串流

Java 从HashMap中的路径返回字符串流,java,path,hashmap,java-8,java-stream,Java,Path,Hashmap,Java 8,Java Stream,我在努力学习溪流和小径。我在O(n)时间内创建了一个拼写检查器,我正在尝试按照一个指南使用Map/HashMap/path/和Streams创建拼写检查器 我已经创建了word文件的路径并将其加载。我无法理解如何打印此列表。我似乎无法访问它从路径中读取时创建的单词列表。我相信我必须返回一个字符串流,只是很难弄清楚它到底是如何工作的 输入文件是一个单词词典,大约有56k个单词。每行一个字 示例输出(一个长的字流) 现行代码 import java.io.*; 导入java.util.*; 导入ja

我在努力学习溪流和小径。我在O(n)时间内创建了一个拼写检查器,我正在尝试按照一个指南使用Map/HashMap/path/和Streams创建拼写检查器

我已经创建了word文件的路径并将其加载。我无法理解如何打印此列表。我似乎无法访问它从路径中读取时创建的单词列表。我相信我必须返回一个字符串流,只是很难弄清楚它到底是如何工作的

输入文件是一个单词词典,大约有56k个单词。每行一个字

示例输出(一个长的字流) 现行代码
import java.io.*;
导入java.util.*;
导入java.util.Scanner;
导入java.lang.*;
导入java.nio.file.*;
导入java.nio.file.Path;
导入java.util.*;
导入java.util.stream.*;
公共类检查程序{
私有静态映射dict=newhashmap();
公共静态void main(字符串[]args){
Path dictOpen=Path.get(“/Users/sam/IdeaProjects/wordSpell/src/newWords.txt”);
试一试{
//尝试打开文件
拼写(公开);
}捕获(例外e){
System.out.println(“失败路径”);
}
//找不到dict,即使我在前一步将其加载到内存中。
用于(字符串温度:dict){
系统输出打印项次(温度);
}
//这会产生一个巨大的字符串,将所有单词组合在一行上。
//理想情况下,我想使用已知单词的方法来查找单个单词
对于(字符串温度:dict.keySet(){
系统输出打印项次(温度);
}
}
私有静态无效拼写(路径字典文件)引发异常{
Stream.of(新字符串(Files.readAllBytes(dictionaryFile)).toLowerCase().replaceAll(“[^a-z]”),split(“”)。forEach((word)->{
dict.compute(单词,(k,v)->v==null?1:v+1);
});
}
私有静态流已知(流字){
返回words.filter((word)->dict.containsKey(word));
}
}
您有两个问题:

1-对于地图中的迭代,请使用

for (Map.Entry<String, Integer> entry : dict.entrySet())
    {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }
for(Map.Entry:dict.entrySet())
{
System.out.println(entry.getKey()+“/”+entry.getValue());
}
2-Files.readAllBytes将在一个字符串中读取所有文件。因此,如果您有单词foo和bar,当您使用此函数读取时,您将有:foobar


查找Files.readAllLines。

Map
不可
Iterable
。也许你的意思是(String temp:dict.keySet())?所以根据keySet或Value打印?我不明白这个问题。如果我基于dic.keySet()打印system.out.println-我得到一个巨大的字符串输出。我试图一次打印一个单词。这意味着你只有一个巨大的键。你能包括一些示例输入吗?
import java.io.*;
import java.util.*;
import java.util.Scanner;
import java.lang.*;
import java.nio.file.*;
import java.nio.file.Path;
import java.util.*;
import java.util.stream.*;


public class TheChecker {

    private static Map<String,Integer> dict = new HashMap<>();

    public static void main(String[] args) {

        Path dictOpen = Paths.get("/Users/sam/IdeaProjects/wordSpell/src/newWords.txt");

        try{
            //try opening file
            Spelling(dictOpen);
        } catch(Exception e) {
            System.out.println("Failed path");
        }

        //fails to find dict even though I load it into memory the step before.
        for(String temp : dict) {
            System.out.println(temp);
        }
        //This produces one giant string of all words combined on one line.
        //Ideally I would like to use the known word method to find a single word
        for(String temp : dict.keySet() {
            System.out.println(temp);
        }
    }

    private static void Spelling(Path dictionaryFile) throws Exception{
        Stream.of(new String(Files.readAllBytes( dictionaryFile )).toLowerCase().replaceAll("[^a-z ]","").split(" ")).forEach( (word) ->{
            dict.compute( word, (k,v) -> v == null ? 1 : v + 1  );
        });

    }

    private static Stream<String> known(Stream<String> words){
        return words.filter( (word) -> dict.containsKey(word) );
    }
    }
for (Map.Entry<String, Integer> entry : dict.entrySet())
    {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }