您将如何编码地图,以使每个单词映射的初始字符都符合整个单词?
考虑包含:
的单词列表- 艾伯特
- ben
- 爱丽丝
- 塞西莉亚
输出应为{a=[albert,alice], b=[ben], c=[cecilia]}
这是我现在拥有的,但我不明白如何将每个键映射到所有通讯单词。
地图是类型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();
}
您可以在没有BufferedReader
的情况下完成此操作,然后简化您的整个代码:
protected WordStore(String file) {
this.bigMap = Files.lines(Paths.get(file))
.collect(Collectors.groupingBy(word -> word.substring(0, 1)));
}