java - 将每个以相同字符开头的键映射到单词列表

标签 java list hashmap

如何编写映射以便每个单词的首字符映射到整个单词?

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

  • 阿尔伯特
  • 爱丽丝
  • 塞西莉亚

输出应为 {a=[albert,alice], b=[ben], c=[cecilia]}

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

map 类型为 Map<String, List<String>> 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<>());
            }

    }

最佳答案

读取所有行并将其添加到 List<String> 。完成后,您可以使用groupingBy来完成手头的任务。收集器。

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();
}

或者:

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

关于java - 将每个以相同字符开头的键映射到单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976286/

相关文章:

java - Android GridView 获取子项不起作用

java - 如何以用户友好的方式使用 GoogleDocs 查看 ACRA 异常(exception)情况?

python - 巧妙地访问和修改多维列表

Java - 将元素添加到 HashMap 数组会产生空错误

java - 使用 HashMap 对相似的项目进行分组

java - 为什么 Junit TestRunner 找不到功能?

java - 扩展类(其父类扩展了 JFrame)后出现 StackOverflowError

C# - 求和列表<string[]>

list - Scala 清空列表

java - 对对象 HashMap 进行排序(不按键)