Java 将以相同字符开头的每个键映射到wordlist

Java 将以相同字符开头的每个键映射到wordlist,java,list,hashmap,Java,List,Hashmap,如何编写映射,使每个单词的初始字符映射到整个单词 考虑包含以下内容的单词列表: 阿尔伯特 本 爱丽丝 塞西莉亚 输出应该是{a=[albert,alice],b=[ben],c=[cecilia]} 这就是我现在拥有的,但我不知道如何将每个键映射到所有对应的单词 地图类型为map bigMap protected WordStore(String file) { this.bigMap = new HashMap<>(); String line = "";

如何编写映射,使每个单词的初始字符映射到整个单词

考虑包含以下内容的单词列表:

  • 阿尔伯特
  • 爱丽丝
  • 塞西莉亚
输出应该是
{a=[albert,alice],b=[ben],c=[cecilia]}

这就是我现在拥有的,但我不知道如何将每个键映射到所有对应的单词

地图类型为
map bigMap

 protected WordStore(String file) {
    this.bigMap = new HashMap<>();
    String line = "";
    try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file));)
    {
        this.wordlist = new ArrayList<String>();
        wordlist.add(file);
        while ( (line = bufferedReader.readLine()) != null){
                bigMap.putIfAbsent(String.valueOf(line.charAt(0)), new ArrayList<>());
            }

    }
protectedwordstore(字符串文件){
this.bigMap=newhashmap();
字符串行=”;
try(BufferedReader BufferedReader=new BufferedReader(new FileReader(file));)
{
this.wordlist=new ArrayList();
添加(文件);
而((line=bufferedReader.readLine())!=null){
bigMap.putIfAbsent(String.valueOf(line.charAt(0)),新的ArrayList();
}
}

阅读所有行并将其添加到
列表中。完成后,您可以使用
分组依据
收集器完成手头的任务

this.bigMap = myList.stream()
                    .collect(Collectors.groupingBy(s -> s.substring(0, 1)));
或者,您可以一次读取文件和分组,如下所示:

try (Stream<String> stream = Files.lines(Paths.get(file))) {
     this.bigMap = stream.collect(Collectors.groupingBy(s -> s.substring(0, 1)));
} catch (IOException e) {
      e.printStackTrace();
}

您可以在不使用BufferedReader的情况下执行此操作,并将整个代码简化为:

protected WordStore(String file) {
    this.bigMap = Files.lines(Paths.get(file))
                  .collect(Collectors.groupingBy(word -> word.substring(0, 1)));    
}

这不会改变我的地图类型吗?谢谢,你的回答很详尽。我真的很感激。
protected WordStore(String file) {
    this.bigMap = Files.lines(Paths.get(file))
                  .collect(Collectors.groupingBy(word -> word.substring(0, 1)));    
}